2

EFCore 6.0入门看这篇就够了

 2 years ago
source link: https://www.cnblogs.com/Mamba8-24/p/16098812.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

EFCore 6.0入门看这篇就够了

作为一直在dotNet行业耕耘的码农,这几年在大大小小项目中也涉及到了许多ORM框架,比如:EFCore,Dapper,NHibernate,SqlSugar等等,这些ORM都有各自的优缺点,大家在选择上呢也是仁者见仁智者见智,其实按自身项目的需求来就好,没有最好的只有最合适的。
就我自身的情况来说用的比较多的还是EF Core,回想过来自己也算是EFCore的忠实粉丝了吧,哈哈哈!
最近在倒腾EF Core官网时,看到在最新的EFCore6.0的Priview4中EFCore开发团队对于EFCore性能的提升,EFCore6会比EFCore5快了70%,以及在执行查询的速度方面提高了31%,堆分配减少了43%。在 TechEmpower Fortunes 基准测试中,对比Dapper和EF Core之间的差距从55%缩小到略低于5%。到此,我们可以好好展望展望EF Core7了。
对这方面感兴趣的同学可自行前往官网了解:
EF Core6.0的新增功能
宣布推出 Entity Framework Core 6.0 预览版 4:性能版本
看到这里,那些一直想用EF Core又担心EF Core性能达不到项目要求的同学,现在可以大胆的用起来了。

本篇教程我会站在小白的视角来教大家一步步使用EF Core,并且会按照项目开发的标准来,同学们可以直接应用到实际项目中。
当然,如果前来拜访的是行业大佬,那咱借一步说话,就不班门弄斧了。
如果是之前对EF Core不了解的同学那亦可在此稍作停留,喝喝茶,嗑嗑瓜子,听我娓娓道来。

  • Visual Studio 2022
  • .Net Core 6
  • EF Core 6
  • SQL Server

打开Visual Studio2022,选择ASP.NET Core空项目基于.Net6 创建
image.png

image 1.png

注:.Net 6已将Startup.cs文件和Program.cs统一到单个Program.cs文件中
想了解.Net6更多变化请移步官网 传送门 .Net 6
image 2.png

安装 Entity Framework Core

我们先来安装几个Nuget包(后续会用到):
Microsoft.EntityFrameworkCore.SqlServer (适用于EF Core SQL Server 提供程序)
Microsoft.EntityFrameworkCore.Design(适用于EF Core .NET Core CLI 工具 )
Microsoft.EntityFrameworkCore.Tools(适用于 EF Core 的包管理器控制台工具)

使用Visual Studio NuGet 包管理器控制台安装

入口:工具>NuGet包管理器>程序包管理器控制台

Install-Package Microsoft.EntityFrameworkCore.SqlServer
Install-Package Microsoft.EntityFrameworkCore.Tools
Install-Package Microsoft.EntityFrameworkCore.Design

image 3.png

使用NuGet 包管理器安装

image 4.png

image 5.png

创建实体类

Blog与Post建立一对多的关系
Blog.cs
image 6.png
Post.cs
image 7.png

创建上下文类

注:数据库上下文类是为给定数据模型协调 EF Core 功能的主类。 上下文派生自 Microsoft.EntityFrameworkCore.DbContext。 上下文指定数据模型中包含哪些实体。

新建BloggingContext.cs,然后继承DbContext
image 8.png

然后我们需要将我们的BloggingDbContext的配置传递给DbContext

ApplicationDbContext 类必须公开具有 DbContextOptions 参数的公共构造函数。 这是将 AddDbContext 的上下文配置传递到 DbContext 的方式

image 9.png

这样配置后,BloggingDbContext可以通过构造函数注入在 ASP.NET Core 控制器或其他服务中使用:
例如:
image 10.png

我们需要通过上下文中的DbSet属性将我们的模型加入上下文中,并且公开它们

由于一个实体集包含多个实体,因此许多开发人员更倾向于使用复数形式的 DBSet 属性名称

  • 将为每个实体集创建一个 DbSet 属性。 在 EF Core 术语中:
    • 实体集通常对应数据库表。
    • 实体对应表中的行。

image 11.png

我们重写OnModelCreating方法来进一步配置我们刚刚我们往上下文中加入的实体
image 12.png

这里有几种方式配置(推荐方法二),此处采用Fluent API方式配置,也可采用数据注释方式(不建议)
详见官网EF Core实体类型配置
(1)可以直接堆在OnModelCreating中(不推荐):
image 13.png
(2)通过IEntityTypeConfiguration配置(推荐)
我们给对应实体建立对应的EntityTypeConfiguration配置文件
BlogEntityTypeConfiguration.cs
image 14.png
PostEntityTypeConfiguration.cs
image 15.png
BloggingContext.cs
image 16.png
更多关于Fluent API的配置 请移步官网查看创建模型

注入DbContext

Program.cs
image 17.png
appsettings.Development.json 自行配置数据库连接字符串
image 18.png

使用Code First 根据实体生成数据库

打开程序包管理控制台

第一步生成迁移文件:
这里有几个需要注意的地方
(1)解决方案能够编译通过
(2)将目标项目设为启动项
(3)程序包管理控制台中的默认项目一栏选择目标项目

Add-Migration Init 直接回车即可

image 19.png
第二步将生成的迁移文件执行到DB中即可

输入 update-database 直接回车即可

image 20.png
出现Done 则为执行完毕
image 21.png
我们可以去查看数据库了
image 22.png
数据库中成功生成了我们配置的对应的表结构。
当然,我们也可以在初始化数据库之前配置种子数据。
感兴趣的同学可以移步官网查看 种子数据设定
配置方法都大差不差
image 23.png

当然 EFCore 也支持DBFirst,您可以通过数据库中已存在的表结构来生成的实体
由于本文篇幅有限,关于DBFirst您可以选择去官网学习,也可以等我后续文章。

文章如有不妥之处,欢迎大家指正。
后续还会分享关于EF Core在项目中使用经验的文章,包括踩坑以及优化方面,欢迎大家关注!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK