前段时间.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. Mac解决某些命令失效问题

    PS:今天安装groovy,需要设置环境变量,vim -/.bash_profile,然后立马执行了source -/.bash_profile.最后,发现ls,more,vim等常用命令失效了.立马 ...

  2. Allegro导入PADS文件

    1.打开要转换的PADS文件,并导出ASC文件 全选.格式选择PowerPCB V5.0 2.打开Allegro软件,导入上面生成的ASC文件 单击Translate即可完成转换,目录切换到输出路径, ...

  3. Winform 关闭按钮

    问题:我希望树形导航目录窗体在打开一条记录后自动隐藏,然后再次点击主页面打开按钮的时候在自动显示,这样就能保证树形目录仍旧显示隐藏前的展开状态.这里遇到一个问题,就是点击窗体右上角的关闭按钮时,默认情 ...

  4. 软件体系架构之ssh框架阅读笔记

    首先我们要了解一下什么是ssh框架? SSH是 struts+spring+hibernate的一个集成框架,是目前比较流行的一种Web应用程序开源框架. ssh框架系统从职责上分为四层:web层 业 ...

  5. Python基础之语句1

    一.行定义(两类): 1.物理行:程序员编写代码的行. 2.逻辑行:python解释器需要执行的指令. 建议:一个逻辑行在一个物理行上,若一个物理行使用多个逻辑行,需要使用分号隔开:如果逻辑行过长,可 ...

  6. 学习虚拟机时Vbox提示硬件加速不可用时应该怎么办?

    也不知大家在安装或使用虚拟机时有没有出现过这样的现象?Vbox提示硬件加速不可用? 在学习Java和安装虚拟机时,自己的电脑上出现Vbox提示Vt-x硬件加速不可用,但后也知道了方法怎么弄! 方法及步 ...

  7. Differenciate or distinguish between outlook attachment and embedded image/signature using property accessor in C#.NET

    These days, outlook emails are composed in three formats; plain text, html and rtf (rich text format ...

  8. flex 左边固定宽度,右边自适应

    <div id="flex"> <div id="left">我在边,定宽</div> <div id="r ...

  9. Django学习之django自带的contentType表 GenericRelation GenericForeignKey

    Django学习之django自带的contentType表   通过django的contentType表来搞定一个表里面有多个外键的简单处理: 摘自:https://blog.csdn.net/a ...

  10. 【Python基础】lpthw - Exercise 39 字典

    1. 字典和列表的区别 对于列表,它是一些项的有序排列,只能通过数值来进行索引:对于字典,则可以通过许多东西进行索引,它采用键-值映射的方式,不存在一个特定的顺序,因此不能用类似列表的数值索引,但它的 ...