又升級了!EF Core 7.0 預覽版 4

微軟技術棧發表於2022-05-27

近期.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 並描述了它們的用途。
image.png

  • 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 儲存庫上提交發現的問題和任何其他反饋。

有用的網址

提供以下連結以方便參考和訪問。

來自團隊的感謝

EF 團隊非常感謝多年來使用併為 EF 做出貢獻的所有人!歡迎來到 EF7。


長按識別二維碼
關注微軟中國MSDN

EF7 的完整計劃

相關文章