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