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 创建

注:.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 _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 的方式

这样配置后,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中(不推荐):

(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 自行配置数据库连接字符串

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

打开程序包管理控制台

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

Add-Migration Init 直接回车即可


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

输入 update-database 直接回车即可

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

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

结尾

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

posted @ 2022-04-04 12:17  Mamba24⁸  阅读(10782)  评论(10编辑  收藏  举报