前段时间.Net Core 3.0 发布了,Entity Framework Core 3.0 也发布了Preview版。假期用了一上午大致研究了一遍,同时又体验了一把Visual Studio 2019。总结一下分享给大家:

  1. VS2019 新建.Net Core 3.0 Console应用,添加EFCore相关的Nuget引用
  2. 增加appSettings.json配置文件,配置数据库连接
  3. 新建OneToMany模型,使用EF Core完成数据库操作

一、VS2019 新建.Net Core 3.0 Console应用,添加EFCore相关的Nuget引用

 1. 新建.Net Core控制台应用 EFCoreTest

新建完成后,查看项目的依赖性,我们可以看到:

2. 添加Microsoft.EntityFrameworkCore 3.0 Preview版 Nuget引用

同时添加Microsoft.EntityFrameworkCore.SqlServer3.0 Nuget引用(我们要用到SQL Server)

这样我们就完成了项目的初始化。

二、增加appsettings.json配置文件,配置数据库连接

  1. 项目中添加appsettings.json文件

配置文件的内容如下:

{"ConnectionStrings": {"BizDatabase": "Server=127.0.0.1;Database=master;User id=sa;password=******" }}

2. 访问这个appsettings.json配置文件我们需要引用以下Nuget包:版本用的都是:3.0.0-preview3.19153.1

  • Microsoft.Extensions.Configuration
  • Microsoft.Extensions.Configuration.Json

三、新建OneToMany模型,使用EF Core完成数据库操作

这里以充电站和集控为例,1:M的关联关系。

这里我们同时使用了EF的注解,示例了个性化数据库表结构。以及外键关系

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Text; namespace EFCoreTest
{
/// <summary>
/// 充电站
/// </summary>
[Table("Stations")]
public class ChargeStation
{
[Key]
[Column("ID")]
public string ID { get; set; } [Required]
[Column("Code")]
public string Code { get; set; } [Required]
[Column("Name")]
public string Name { get; set; } [Required]
[Column("MaintainTel")]
public long MaintainTel { get; set; } [ForeignKey("StationID")]
public virtual List<ChargeStationController> Controllers { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Text; namespace EFCoreTest
{
/// <summary>
/// 电站集控
/// </summary>
[Table("StationCtrl")]
public class ChargeStationController
{
[Key]
[Column("ID")]
public string ID { get; set; } [Required]
[Column("Code")]
public string Code { get; set; } [Required]
[Column("ControlAddress")]
public string ControlAddress { get; set; } [Required]
[Column("StationID")]
[ForeignKey("StationID")]
public string StationID { get; set; }
}
}

实体及关联关系搞定后,我们介绍今天的主角  DbContext的实现:ChargeDbContext

  ChargeDbContext 有几个重要的属性和方法:

public DbSet<ChargeStation> Stations { get; set; }
public DbSet<ChargeStationController> StationCtrl { get; set; }

重载OnConfiguring方法,加载配置系统、数据库连接串

 public class ChargeDbContext : DbContext
{
public DbSet<ChargeStation> Stations { get; set; }
public DbSet<ChargeStationController> StationCtrl { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json"); var configuration = builder.Build(); var conn = configuration.GetConnectionString("BizDatabase");
optionsBuilder.UseSqlServer(conn);
}
}

至此, 核心主要的EFCore 代码已经完成,我们继续来实现对ChargeStation的数据库操作:

我们在Main函数中实现对ChargeStation和ChargeStationController的删除和保存操作,以下代码,大家用过EF应该很熟悉:

 class Program
{
static void Main(string[] args)
{
using (var context = new ChargeDbContext())
{
foreach (var sta in context.Stations.Include(i => i.Controllers))
{
context.Remove(sta);
} context.SaveChanges(); var station = new ChargeStation
{
ID = "Station0001",
Code = "Station0001",
Name = "济南市奥体中路汉庭充电站",
MaintainTel = ,
Controllers = new System.Collections.Generic.List<ChargeStationController>
{
new ChargeStationController
{
ID = "Station0001-101",
Code = "Station0001-101",
ControlAddress = "",
StationID = "Station0001"
}
}
}; context.Stations.Add(station);
context.SaveChanges();
Console.WriteLine("Press any key!");
Console.ReadKey();
}
}
}

以上即是EntityFramework Core 3.0 Preview 体验和使用分享,后续有会有一篇文章介绍在Debug时,如何Trace SQL语句。

周国庆

2019/4/6

.NetCore技术研究-EntityFramework Core 3.0 Preview的更多相关文章

  1. .NetCore技术研究-.NET Core迁移前的准备工作

    前段时间迁移.NET Core做了大量的试水和评估,今天整理一下分享给大家.大致有以下几个部分: 1. .NET Core的由来 2. 为什么要迁移.NET Core 3. .NET Core3.X主 ...

  2. 【译】.NET Core 3.0 Preview 3中关于ASP.NET Core的更新内容

      .NET Core 3.0 Preview 3已经推出,它包含了一系列关于ASP.NET Core的新的更新. 下面是该预览版的更新列表: Razor组件改进: 单项目模板 新的Razer扩展 E ...

  3. asp.net core 1.1 项目升级至 asp.net core 2.0 preview 2 与正式版

    这两天把一个 asp.net core 1.1 的项目迁移到了 asp.net core 2.0 preview 2 ,在这篇随笔中记录一下. 如果项目在有 global.json 文件,需要删除或修 ...

  4. 用VS Code体验调试.NET Core 2.0 Preview (传统三层架构)

    准备工作 VS Code下载地址:https://vscode.cdn.azure.cn/stable/379d2efb5539b09112c793d3d9a413017d736f89/VSCodeS ...

  5. EntityFramework Core 2.0执行原始查询如何防止SQL注入?

    前言 接下来一段时间我们来讲讲EntityFramework Core基础,精简的内容,深入浅出,希望为想学习EntityFramework Core的童鞋提供一点帮助. EntityFramewor ...

  6. EntityFramework Core 2.0全局过滤(HasQueryFilter)

    前言 EntityFramework Core每一次版本的迭代和更新都会带给我们惊喜,每次都会尽量满足大部分使用者的需求.在EF Core 2.0版本中出现了全局过滤新特性即HasQueryFilte ...

  7. EntityFramework Core 2.0 Explicitly Compiled Query(显式编译查询)

    前言 EntityFramework Core 2.0引入了显式编译查询,在查询数据时预先编译好LINQ查询便于在请求数据时能够立即响应.显式编译查询提供了高可用场景,通过使用显式编译的查询可以提高查 ...

  8. selenium相关技术研究(从1.0-3.0)

    注: 以下内容引自http://www.cnblogs.com/hhudaqiang/p/6550135.html Selenium相关技术研究(从1.0-3.0) 好吧,最近看wxpython有点多 ...

  9. .NET Core 2.0 Preview 1发布下载和文档

    .NET Core 2.0.0 Preview 1 发布于 2017 5.10. 你可以通过 Visual Studio 2017 Preview 15.3, Visual Studio for Ma ...

随机推荐

  1. Jupyter notbook& REVEAL.JS& nbconvert 使用jupyter notebook制作slides

    使用Jupyter notebook作为slide主要有两个方面: 在运行notebook 的时候可以幻灯片播放 这样幻灯片就有了notebook可交互的功能,而notebook就有了幻灯片全屏容易分 ...

  2. webpack实现开发、测试、生产等环境的打包切换

    使用webpack构建的工程,在开发过程中不同环境的配置不同,在各种环境的打包切换过程中需要手动修改相关配置达到预期目的.但是每次都手动修改会比较麻烦,本文简单介绍如何通过对webpack进行配置,实 ...

  3. React(一)使用脚手架创建React项目

    1.安装脚手架 现在使用较多的就是这三种脚手架工具: react-boilerplate react-redux-starter-kit create-react-app 我使用的是第三种,faceb ...

  4. QT杂记(网上资料整理而成)

    1.新建工程时,Qwidget和Qdialog和Qmianwindow三者的区别? QWidget是所有图形界面的基类QMainWindow是一个提供了菜单.工具条的程序主窗口QDialog是对话框. ...

  5. ubuntu重复登录问题

    第一次遇到: 昨天好不容易装好了驱动,紧接着装了CUDA,cuDNN,Anaconda,VSCode等等.然后安装pytorch的时候遇到了下载的问题,后来也算搞定了.但是在更换了显示器后重启(好像是 ...

  6. vue菜鸟从业记:没准备好的面试,那叫尬聊

    最近我的朋友王小闰参加了一场面试,在他填写简历表的时候,排在他前面的应聘者正在旁边邻桌接受来自面试官的检验. 王小闰边写边想,这不就是一会儿要面试自己的前端leader么,现在面试官提问的一些面试题会 ...

  7. TCP三次握手四次挥手最通俗理解

    工作过程TCP标志位:TCP共有6个标志位,分别是: SYN(synchronous),建立联机.ACK(acknowledgement),确认.PSH(push),传输.FIN(finish),结束 ...

  8. Python基础之列表深浅复制和列表推导式

    一.列表深浅复制: 浅拷贝内存图如下: 深拷贝内存图如下: 二.列表推导式: 实例: """ 列表推导式 练习:exercise01 """ ...

  9. Libvmi实现分析

    LibVMI是一个专注于读写虚拟机内存的自省库,它能够监视虚拟机底层的运行细节并将其还原.LibVMI支持对Xen及KVM虚拟化平台上的运行虚拟机进行自省操作,针对KVM虚拟化平台,LibVMI对QE ...

  10. Spring Boot web简介及原理 day04

    一.SpringBoot创建web开发(三部曲) 1.快速构建SpringBoot项目,并以jar包的形式构建 2.选择对应的功能模块 (选定场景,配置少量的配置就可运行,不配置有默认值) 3.编写自 ...