EFCore 6.0入門看這篇就夠了

Mamba24⁸發表於2022-04-04

前言

作為一直在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 建立
image.png

image 1.png

注:.Net 6已將Startup.cs檔案和Program.cs統一到單個Program.cs檔案中
想了解.Net6更多變化請移步官網 傳送門 .Net 6
image 2.png

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

image 3.png

使用NuGet 包管理器安裝

image 4.png

image 5.png

建立實體類

Blog與Post建立一對多的關係
Blog.cs
image 6.png
Post.cs
image 7.png

建立上下文類

注:資料庫上下文類是為給定資料模型協調 EF Core 功能的主類。 上下文派生自 Microsoft.EntityFrameworkCore.DbContext。 上下文指定資料模型中包含哪些實體。

新建BloggingContext.cs,然後繼承DbContext
image 8.png

然後我們需要將我們的BloggingDbContext的配置傳遞給DbContext

ApplicationDbContext 類必須公開具有 DbContextOptions 引數的公共建構函式。 這是將 AddDbContext 的上下文配置傳遞到 DbContext 的方式

image 9.png

這樣配置後,BloggingDbContext可以通過建構函式注入在 ASP.NET Core 控制器或其他服務中使用:
例如:
image 10.png

我們需要通過上下文中的DbSet屬性將我們的模型加入上下文中,並且公開它們

由於一個實體集包含多個實體,因此許多開發人員更傾向於使用複數形式的 DBSet 屬性名稱

  • 將為每個實體集建立一個 DbSet 屬性。 在 EF Core 術語中:
    • 實體集通常對應資料庫表。
    • 實體對應表中的行。

image 11.png

我們重寫OnModelCreating方法來進一步配置我們剛剛我們往上下文中加入的實體
image 12.png

這裡有幾種方式配置(推薦方法二),此處採用Fluent API方式配置,也可採用資料註釋方式(不建議)
詳見官網EF Core實體型別配置
(1)可以直接堆在OnModelCreating中(不推薦):
image 13.png
(2)通過IEntityTypeConfiguration配置(推薦)
我們給對應實體建立對應的EntityTypeConfiguration配置檔案
BlogEntityTypeConfiguration.cs
image 14.png
PostEntityTypeConfiguration.cs
image 15.png
BloggingContext.cs
image 16.png
更多關於Fluent API的配置 請移步官網檢視建立模型

注入DbContext

Program.cs
image 17.png
appsettings.Development.json 自行配置資料庫連線字串
image 18.png

使用Code First 根據實體生成資料庫

開啟程式包管理控制檯

第一步生成遷移檔案:
這裡有幾個需要注意的地方
(1)解決方案能夠編譯通過
(2)將目標專案設為啟動項
(3)程式包管理控制檯中的預設專案一欄選擇目標專案

Add-Migration Init 直接回車即可

image 19.png
第二步將生成的遷移檔案執行到DB中即可

輸入 update-database 直接回車即可

image 20.png
出現Done 則為執行完畢
image 21.png
我們可以去檢視資料庫了
image 22.png
資料庫中成功生成了我們配置的對應的表結構。
當然,我們也可以在初始化資料庫之前配置種子資料。
感興趣的同學可以移步官網檢視 種子資料設定
配置方法都大差不差
image 23.png

當然 EFCore 也支援DBFirst,您可以通過資料庫中已存在的表結構來生成的實體
由於本文篇幅有限,關於DBFirst您可以選擇去官網學習,也可以等我後續文章。

結尾

文章如有不妥之處,歡迎大家指正。
後續還會分享關於EF Core在專案中使用經驗的文章,包括踩坑以及優化方面,歡迎大家關注!

相關文章