前言
作為一直在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在項目中使用經驗的文章,包括踩坑以及優化方面,歡迎大家關注!