• 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在项目中使用经验的文章,包括踩坑以及优化方面,欢迎大家关注!

  • 相关阅读:
    77-Mybatis-Plus详解
    python3对文件编码的转换处理
    基于时间序列模型的非平衡数据的过采样算法
    模型保存和加载
    【QT+JS】QT和JS 中的正则表达式 、QT跑JS语言
    mmcv常用API介绍
    在浏览器输入url到页面展示出来
    支持向量机(SVM)案例分析
    ssrf漏洞--补充部分
    前端进击笔记第十二节 掌握前端框架模板引擎的实现原理
  • 原文地址:https://www.cnblogs.com/Mamba8-24/p/16098812.html