近期.NET 資料團隊宣佈了EF Core 7.0 (EF7)的第四個預覽版。除了bug修復和更大功能的基礎工作外,此預覽版還包括以確保轉換器和比較器由型別對映處理,並支援將轉換器與值生成器一起使用。請務必閱讀EF7 的完整計劃以瞭解路線圖上的內容。
領域驅動設計和“受保護”金鑰
領域驅動設計 (DDD) 的其中一種模式是使用值物件作為鍵的概念。換句話說,而不是像這樣宣告一個鍵:
public class Thing
{
public int Id { get; set; }
}
它可能看起來像這樣:
public class Thing
{
public ThingKey Id { get; set; }
}
public class ThingKey
{
public ThingKey(Func<int> generator) => Id = generator();
public ThingKey(int id) => Id = id;
public int Id { get; private set; }
}
這樣做有幾個好處。第一個也是最明顯的一點是它隱藏了金鑰的實現細節。如果您決定更喜歡使用 GUID 的無限資源,而不是更有限和無聊的可用整數的順序集,那麼由於鍵類提供的緩衝區,您的重構將更加容易。您還可以通過驗證保護金鑰免受不良資料的影響,這樣就沒人可以分配負值。說到意外,你有沒有將錯誤的 id 作為一個鍵傳遞給一個方法?對編譯器而已是不在乎的,因為它都是整數……或位元組……或 1 和 0……但如果您使用強型別鍵,您將被迫提供合適的鍵。否則,編譯器會抱怨。
是否使用此方法當然取決於您,但在預覽版 4 之前,EF Core 中的選擇還是有限的。從實體轉換為標量的最明顯方法是使用轉換器,但如果您嘗試將轉換器分配給標記為生成值的屬性,EF Core 會丟擲異常。該約束已被解除,更重要的是,更新了程式碼以確保正確處理此案例。讓我們知道您是否正在使用此功能以及它如何為您工作!
先決條件
EF7 當前面向 .NET 6。隨著我們即將釋出,它可能會更新到 .NET 7。
EF7 不會在 .NET Framework 上執行。
EF7 是 EF Core 6.0 的繼承者,不要與 EF6混淆。如果您正在考慮從 EF6 升級,請閱讀我們的從 EF6 移植到 EF Core的指南。
如何獲得 EF7 預覽
EF7 僅作為一組 NuGet 包分發。例如,要將 SQL Server 提供程式新增到您的專案中,您可以通過 dotnet 工具使用以下命令:
dotnet add package Microsoft.EntityFrameworkCore.SqlServer --version 7.0.0-preview.4.22229.2
下表連結到 EF Core 包的預覽版 1 並描述了它們的用途。
- Microsoft.EntityFrameworkCore
https://www.nuget.org/package...
- Microsoft.EntityFrameworkCore.SqlServer
https://www.nuget.org/package...
- Microsoft.EntityFrameworkCore.SqlServer.NetTopologySuite
https://www.nuget.org/package...
- Microsoft.EntityFrameworkCore.Sqlite
https://www.nuget.org/package...
- Microsoft.EntityFrameworkCore.Sqlite.Core
https://www.nuget.org/package...
- Microsoft.EntityFrameworkCore.Sqlite.NetTopologySuite
https://www.nuget.org/package...
- Microsoft.EntityFrameworkCore.Cosmos
https://www.nuget.org/package...
- Microsoft.EntityFrameworkCore.InMemory
https://www.nuget.org/package...
- Microsoft.EntityFrameworkCore.Tools
https://www.nuget.org/package...
- Microsoft.EntityFrameworkCore.Design
https://www.nuget.org/package...
- Microsoft.EntityFrameworkCore.Proxies
https://www.nuget.org/package...
- Microsoft.EntityFrameworkCore.Abstractions
https://www.nuget.org/package...
- Microsoft.EntityFrameworkCore.Relational
https://www.nuget.org/package...
- Microsoft.EntityFrameworkCore.Analyzers
https://www.nuget.org/package...
- 腳手架
https://docs.microsoft.com/ef...
- 遷移
https://docs.microsoft.com/ef...
我們還發布了Microsoft.Data.Sqlite.Core 7.0 預覽版 1 為 ADO.NET.。
安裝 EF7 命令列介面 (CLI)
在執行 EF7 Core 遷移或指令碼命令之前,您必須將 CLI 包安裝為全域性或本地工具。
要全域性安裝預覽工具,請安裝:
dotnet tool install --global dotnet-ef --version 7.0.0-preview.4.22229.2
如果您已經安裝了該工具,則可以使用以下命令對其進行升級:
dotnet tool update --global dotnet-ef --version 7.0.0-preview.4.22229.2
可以將此新版本的 EF7 CLI 用於使用舊版本 EF Core 執行時的專案。
每日builds
EF7 預覽版與 .NET 7 預覽版一致。這些預覽往往落後於 EF7 的最新工作。考慮使用每日builds來獲取最新的 EF7 功能和bug修復。
與預覽版一樣,每日builds需要 .NET 6。
文件和反饋
所有 EF Core 文件的入口點是docs.microsoft.com/ef/。
歡迎在dotnet/efcore GitHub 儲存庫上提交發現的問題和任何其他反饋。
有用的網址
提供以下連結以方便參考和訪問。
- 主要文件https://aka.ms/efdocs
- EF Core 的問題和功能請求https://aka.ms/efcorefeedback
- 實體框架路線圖https://aka.ms/efroadmap
- 雙週更新https://github.com/dotnet/efc...
來自團隊的感謝
EF 團隊非常感謝多年來使用併為 EF 做出貢獻的所有人!歡迎來到 EF7。
長按識別二維碼
關注微軟中國MSDN