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

安装 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入门看这篇就够了的更多相关文章
- React入门看这篇就够了
摘要: 很多值得了解的细节. 原文:React入门看这篇就够了 作者:Random Fundebug经授权转载,版权归原作者所有. React 背景介绍 React 入门实例教程 React 起源于 ...
- [转帖]Zookeeper入门看这篇就够了
Zookeeper入门看这篇就够了 https://my.oschina.net/u/3796575/blog/1845035 Zookeeper是什么 官方文档上这么解释zookeeper,它是一个 ...
- [转]React入门看这篇就够了
摘要: 很多值得了解的细节. 原文:React入门看这篇就够了 作者:Random Fundebug经授权转载,版权归原作者所有. React 背景介绍 React 入门实例教程 React 起源于 ...
- .NET Core实战项目之CMS 第五章 入门篇-Dapper的快速入门看这篇就够了
写在前面 上篇文章我们讲了如在在实际项目开发中使用Git来进行代码的版本控制,当然介绍的都是比较常用的功能.今天我再带着大家一起熟悉下一个ORM框架Dapper,实例代码的演示编写完成后我会通过Git ...
- Zookeeper入门看这篇就够了!!
Zookeeper是什么 官方文档上这么解释zookeeper,它是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名 ...
- ZooKeeper 入门看这篇就够了
什么是 ZooKeeper? ZooKeeper 是一个分布式的,开放源码的分布式应用程序协同服务.ZooKeeper 的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原 ...
- Storm入门,看这篇就够了
部分一:Srorm 简介 1.1 Storm是实时的数据流,Hadoop是批量离线数据 起源背景 Twitter 开源的一个类似于Hadoop的实时数据处理框架 Storm是由Nathan Marz ...
- Zookeeper入门看这篇就够了
https://blog.csdn.net/java_66666/article/details/81015302
- 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 ...
随机推荐
- MacBook苹果电脑绕过BootCamp安装Win7双系统
上周老婆的一个朋友的笔记本电脑说电脑太慢说帮忙清理一下电脑,我一看是MACBOOKPRO 的笔记装的双系统,之前一直接触的都是WINDOWS居多.想着干脆装个WIN10吧,谁知道一下就跳坑里了,一分区 ...
- 2022年官网下安装Redis最全版与官网查阅方法
目录 安装部署Redis 一.下载安装 1.百度搜索Redis,双击进入. 2.下载稳定版(服务器版本),如图所示 3.找到下载的位置,解压压缩包(查看发现不是windows版本) 4.官网没有win ...
- 阿里云镜像站DNS——Chrome配置方法
镜像下载.域名解析.时间同步请点击 阿里巴巴开源镜像站 DNS 简介 域名系统(服务)协议(DNS)是一种分布式网络目录服务,主要用于域名与 IP 地址的相互转换,以及控制因特网的电子邮件的发送. 阿 ...
- Flask 之 宏
宏 对宏(macro)的理解: 把它看作 Jinja2 中的一个函数,它会返回一个模板或者 HTML 字符串 为了避免反复地编写同样的模板代码,出现代码冗余,可以把他们写成函数以进行重用 需要在多处重 ...
- 6月28日 Django form组件 和 modelform组件
Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否 ...
- http请求中的三种参数类型
1.URL参数:实际就是querry string的方式,参数拼接在url之后以?隔开,参数之间以&连接. 优点:简单,页面跳转比较快. 缺点:1.基于浏览器对urk长度有限制,不能超过204 ...
- CVE-2017-12635(Couchdb垂直权限绕过漏洞)
简介 Apache CouchDB是一个开源数据库,专注于易用性和成为"完全拥抱web的数据库".它是一个使用JSON作为存储格式,JavaScript作为查询语言,MapRedu ...
- final, finally, finalize的区别?
final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承.内部类要访问局部变量,局部变量必须定义成final类型.finally是异常处理语句结构的一部分,表示总是执行.fin ...
- java-jdbc-all
jdbc相关解析 JDBC(Java DataBase Connectivity,Java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语 ...
- Java中final的使用
原文链接https://www.cnblogs.com/dolphin0520/p/10651845.html 作者Matrix海 子 本文为笔记 0. 概述 final和static一样都是修饰词, ...
