關注我們
作者:Jeremy Likness
排版:Rani
近期.NET 數據團隊宣布了?EF Core 7.0 (EF7)的第四個預覽版。除了bug修復和更大功能的基礎工作外,此預覽版還包括以確保轉換器和比較器由類型映射處理,并支持將轉換器與值生成器一起使用。請務必閱讀?EF7 的完整計劃以了解路線圖上的內容。
EF Core 7.0 (EF7)
https://www.nuget.org/packages/Microsoft.EntityFrameworkCore/7.0.0-preview.4.22229.2
轉換器和比較器由類型映射處理
https://github.com/dotnet/efcore/issues/17962
將轉換器與值生成器一起使用
https://github.com/dotnet/efcore/issues/11597
EF7 的完整計劃
https://docs.microsoft.com/ef/core/what-is-new/ef-core-7.0/plan
領域驅動設計和“受保護”密鑰
領域驅動設計 (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?的指南。
混淆
https://github.com/dotnet/ef6
EF6 移植到 EF Core
https://docs.microsoft.com/ef/efcore-and-ef6/porting/
如何獲得 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/packages/Microsoft.EntityFrameworkCore/7.0.0-preview.4.22229.2 | 獨立于特定數據庫提供程序的主 EF Core 包 |
Microsoft.EntityFrameworkCore.SqlServer | https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.SqlServer/7.0.0-preview.4.22229.2 | Microsoft SQL Server 和 SQL Azure 的數據庫提供程序 |
Microsoft.EntityFrameworkCore.SqlServer.NetTopologySuite | https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.SqlServer.NetTopologySuite/7.0.0-preview.4.22229.2 | SQL Server 對空間類型的支持 |
Microsoft.EntityFrameworkCore.Sqlite | https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.Sqlite/7.0.0-preview.4.22229.2 | SQLite 的數據庫提供程序,包括數據庫引擎的本機二進制文件 |
Microsoft.EntityFrameworkCore.Sqlite.Core | https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.Sqlite.Core/7.0.0-preview.4.22229.2 | SQLite 的數據庫提供程序,沒有打包的本機二進制文件 |
Microsoft.EntityFrameworkCore.Sqlite.NetTopologySuite | https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.Sqlite.NetTopologySuite/7.0.0-preview.4.22229.2 | SQLite 對空間類型的支持 |
Microsoft.EntityFrameworkCore.Cosmos | https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.Cosmos/7.0.0-preview.4.22229.2 | Azure Cosmos DB 的數據庫提供程序 |
Microsoft.EntityFrameworkCore.InMemory | https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.InMemory/7.0.0-preview.4.22229.2 | 內存數據庫提供程序 |
Microsoft.EntityFrameworkCore.Tools | https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.Tools/7.0.0-preview.4.22229.2 | 用于 Visual Studio 包管理器控制臺的 EF Core PowerShell 命令;使用它來將腳手架和遷移等工具與 Visual Studio集成 |
Microsoft.EntityFrameworkCore.Design | https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.Design/7.0.0-preview.4.22229.2 | EF Core 工具的共享設計時組件 |
Microsoft.EntityFrameworkCore.Proxies | https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.Proxies/7.0.0-preview.4.22229.2 | 延遲加載和更改跟蹤代理 |
Microsoft.EntityFrameworkCore.Abstractions | https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.Abstractions/7.0.0-preview.4.22229.2 | 解耦 EF Core 抽象;將此用于 EF Core 定義的擴展數據注釋等功能 |
Microsoft.EntityFrameworkCore.Relationa | https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.Relational/7.0.0-preview.4.22229.2 | 用于關系數據庫提供程序的共享 EFCore 組件 |
Microsoft.EntityFrameworkCore.Analyzers | https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.Analyzers/7.0.0-preview.4.22229.2 | EF Core 的 C# 分析器 |
我們還發布了?Microsoft.Data.Sqlite.Core 7.0?預覽版 1 為?ADO.NET.
Microsoft.Data.Sqlite.Core
https://www.nuget.org/packages/Microsoft.Data.Sqlite.Core/7.0.0-preview.4.22229.2
ADO.NET
https://docs.microsoft.com/dotnet/framework/data/adonet/ado-net-overview
安裝 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。
每日builds
https://github.com/aspnet/AspNetCore/blob/master/docs/DailyBuilds.md
文檔和反饋
所有 EF Core 文檔的入口點是?docs.microsoft.com/ef/。
歡迎在?dotnet/efcore GitHub 存儲庫上提交發現的問題和任何其他反饋。(https://github.com/dotnet/efcore/issues/11597)
有用的網址
提供以下鏈接以方便參考和訪問。
主要文檔:https://aka.ms/efdocs
EF Core 的問題和功能請求:https://aka.ms/efcorefeedback
實體框架路線圖:https://aka.ms/efroadmap
雙周更新:https://github.com/dotnet/efcore/issues/27185
來自團隊的感謝
EF 團隊非常感謝多年來使用并為 EF 做出貢獻的所有人!
歡迎來到 EF7。