前言

作为一直在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

安装 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

使用NuGet 包管理器安装

## 创建实体类

Blog与Post建立一对多的关系

Blog.cs



Post.cs

创建上下文类

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

新建BloggingContext.cs,然后继承DbContext

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

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

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

例如:

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

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

  • 将为每个实体集创建一个 DbSet 属性。 在 EF Core 术语中:

    • 实体集通常对应数据库表。
    • 实体对应表中的行。

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

这里有几种方式配置(推荐方法二),此处采用Fluent API方式配置,也可采用数据注释方式(不建议)

详见官网EF Core实体类型配置

(1)可以直接堆在OnModelCreating中(不推荐):



(2)通过IEntityTypeConfiguration配置(推荐)

我们给对应实体建立对应的EntityTypeConfiguration配置文件

BlogEntityTypeConfiguration.cs



PostEntityTypeConfiguration.cs



BloggingContext.cs



更多关于Fluent API的配置 请移步官网查看创建模型

注入DbContext

Program.cs



appsettings.Development.json 自行配置数据库连接字符串

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

打开程序包管理控制台

第一步生成迁移文件:

这里有几个需要注意的地方

(1)解决方案能够编译通过

(2)将目标项目设为启动项

(3)程序包管理控制台中的默认项目一栏选择目标项目

Add-Migration Init 直接回车即可



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

输入 update-database 直接回车即可



出现Done 则为执行完毕



我们可以去查看数据库了



数据库中成功生成了我们配置的对应的表结构。

当然,我们也可以在初始化数据库之前配置种子数据。

感兴趣的同学可以移步官网查看 种子数据设定

配置方法都大差不差

当然 EFCore 也支持DBFirst,您可以通过数据库中已存在的表结构来生成的实体

由于本文篇幅有限,关于DBFirst您可以选择去官网学习,也可以等我后续文章。

结尾

文章如有不妥之处,欢迎大家指正。

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

EFCore 6.0入门看这篇就够了的更多相关文章

  1. React入门看这篇就够了

    摘要: 很多值得了解的细节. 原文:React入门看这篇就够了 作者:Random Fundebug经授权转载,版权归原作者所有. React 背景介绍 React 入门实例教程 React 起源于 ...

  2. [转帖]Zookeeper入门看这篇就够了

    Zookeeper入门看这篇就够了 https://my.oschina.net/u/3796575/blog/1845035 Zookeeper是什么 官方文档上这么解释zookeeper,它是一个 ...

  3. [转]React入门看这篇就够了

    摘要: 很多值得了解的细节. 原文:React入门看这篇就够了 作者:Random Fundebug经授权转载,版权归原作者所有. React 背景介绍 React 入门实例教程 React 起源于 ...

  4. .NET Core实战项目之CMS 第五章 入门篇-Dapper的快速入门看这篇就够了

    写在前面 上篇文章我们讲了如在在实际项目开发中使用Git来进行代码的版本控制,当然介绍的都是比较常用的功能.今天我再带着大家一起熟悉下一个ORM框架Dapper,实例代码的演示编写完成后我会通过Git ...

  5. Zookeeper入门看这篇就够了!!

    Zookeeper是什么 官方文档上这么解释zookeeper,它是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名 ...

  6. ZooKeeper 入门看这篇就够了

    什么是 ZooKeeper? ZooKeeper 是一个分布式的,开放源码的分布式应用程序协同服务.ZooKeeper 的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原 ...

  7. Storm入门,看这篇就够了

    部分一:Srorm 简介 1.1 Storm是实时的数据流,Hadoop是批量离线数据 起源背景 Twitter 开源的一个类似于Hadoop的实时数据处理框架 Storm是由Nathan Marz ...

  8. Zookeeper入门看这篇就够了

    https://blog.csdn.net/java_66666/article/details/81015302

  9. net core体系-web应用程序-4asp.net core2.0 项目实战(CMS)-第二章 入门篇-快速入门ASP.NET Core看这篇就够了

    .NET Core实战项目之CMS 第二章 入门篇-快速入门ASP.NET Core看这篇就够了   原文链接:https://www.cnblogs.com/yilezhu/p/9985451.ht ...

随机推荐

  1. cmd 连接宝塔终端

  2. think php 登录 (session+验证码)

    ..........表单页面 <!DOCTYPE html> {__NOLAYOUT__} <html lang="en"> <head> &l ...

  3. PHP 的网站主要攻击方式有哪些?

    1.命令注入(Command Injection)2.eval 注入(Eval Injection)3.客户端脚本攻击(Script Insertion)4.跨网站脚本攻击(Cross Site Sc ...

  4. tensorflow源码解析之common_runtime拾遗

    把common_runtime中剩余的内容,按照文件名排序进行了简单的解析,时间原因写的很仓促,算是占个坑,后续有了新的理解再来补充. allocator_retry 有时候内存分配不可能一次完成,为 ...

  5. 如何使用 Hexo 搭建个人博客

    原文链接 什么是 Hexo ? Hexo 是一个简单快速的静态博客框架,可以通过编辑 Markdown 文档生成好看的静态博客. 搭建 Hexo 要求 安装 Hexo 十分简单,只需要 Node.js ...

  6. 06 for循环 增强for循环 练习

    for循环 //九九乘法表 //1.打印第一列 //2.我们固定的1再用一个循环包起来 //3.去掉重复项,i <= j //4.调整样式 for(int j=1;j <=9;j++){ ...

  7. LGP3281口胡

    当你看到一个东西的时候,GF 有可能比 DP 更方便.处理贡献也有可能比 DP 更方便. 这个题意明显是让我们计算 \(S(r)-S(l-1)\) 之类的东西( 所以直接考虑前缀的答案就好了( 考虑将 ...

  8. RocketMQ 事务消息示例分析

    @ 目录 1 示例模式 2 安装与配置 RocketMQ 3 运行服务 3.1 启动 NameServer 3.2 启动 broker 4 生产者 4.1 事务监听器 4.2 事务消息生产者 5 消费 ...

  9. prometheus虚拟化安装脚本

    在线安装下载链接:https://files.cnblogs.com/files/blogs/705493/online_prometheus.sh 离线安装下载链接:https://files.cn ...

  10. Go 语言 切片的使用(增删改查)

    Go 语言 切片的使用(增删改查) 引言Golang 的数组是固定长度,可以容纳相同数据类型的元素的集合.但是当长度固定了,在使用的时候肯定是会带来一些限制,比如说:申请的长度太大会浪费内存,太小又不 ...