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 ...
随机推荐
- PHP 的网站主要攻击方式有哪些?
1.命令注入(Command Injection)2.eval 注入(Eval Injection)3.客户端脚本攻击(Script Insertion)4.跨网站脚本攻击(Cross Site Sc ...
- cookie、session和Storage
概念: cookie:HTTP响应头的一部分,通过name=value的形式存储,主要用于保存登录信息.在设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭. 存放数据大小为4K左右 .有个 ...
- 解决vue单页面应用做微信JSSDK注入权限时出现“invalid signature”(ios端)
--都说微信开发多坑,没想到遇到一个天坑. 在做一个vue项目时,要用到微信JS-SDK,官方文档详见:https://developers.weixin.qq.com/doc/offiaccount ...
- Redis安装以及常见问题
安装 下载 redis官网地址:https://redis.io/ centos安装 创建软件放置目录mkdir soft 进入soft目录并下载redis安装包. cd soft wget http ...
- IDEA版部署离线ArcGIS api for JavaScript
痛苦!折磨! 这两天发现IDEA 做ArcGIS api 开发比EClipse好用(重点是没有JS提示).但引入的ArcGIS api 一直报错,说找不到.这两天思来想去就是不知道为什么找不到loca ...
- 6月26日 Django 中间件
前戏 我们在前面的课程中已经学会了给视图函数加装饰器来判断是用户是否登录,把没有登录的用户请求跳转到登录页面.我们通过给几个特定视图函数加装饰器实现了这个需求.但是以后添加的视图函数可能也需要加上装 ...
- 深度学习工具LabelXml安装教程
LabelXml安装教程 1,下载LabelXml工具 前往github上下载labelxml,官网地址如下:https://github.com/tzutalin/labelImg 下载打包源码为z ...
- windows server 2019 域控批量新增不用,只看这一篇就够了,别的不用看
windows server 2019 域控批量新增不用,只看这一篇就够了,别的不用看 1. 新建excel表格 A B C D E 姓 名 全名 登录名 密码 李 四 李四 李四 test123!@ ...
- LCT板子
粘板子: #include<cstdio> #include<cstring> #include<algorithm> using namespace std; c ...
- 中国软件杯---电力客户行为分析---图表联动echarts-demo(flask)
中国软件杯---电力客户行为分析---图表联动echarts-demo(flask) 题目链接(可下载原始CSV数据集):http://www.cnsoftbei.com/plus/view.php? ...
