點擊上方藍字
關注我們
(本文閱讀時間:5分鐘)

領域驅動設計和「受保護」密鑰

領域驅動設計 (DDD) 的其中一種模式是使用值對象作為鍵的概念。換句話說,而不是像這樣聲明一個鍵:
它可能看起來像這樣:
這樣做有幾個好處。第一個也是最明顯的一點是它隱藏了密鑰的實現細節。如果您決定更喜歡使用 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
Microsoft.EntityFrameworkCore.SqlServer
Microsoft.EntityFrameworkCore.SqlServer.NetTopologySuite
SQL Server 對空間類型的支持
Microsoft.EntityFrameworkCore.Sqlite
Microsoft.EntityFrameworkCore.Sqlite.Core
Microsoft.EntityFrameworkCore.Sqlite.NetTopologySuite
SQLite 對空間類型的支持
Microsoft.EntityFrameworkCore.Cosmos
Azure Cosmos DB 的數據庫提供程序
Microsoft.EntityFrameworkCore.InMemory
內存數據庫提供程序
Microsoft.EntityFrameworkCore.Tools
Microsoft.EntityFrameworkCore.Design
EF Core 工具的共享設計時組件
Microsoft.EntityFrameworkCore.Proxies
延遲加載和更改跟蹤代理
Microsoft.EntityFrameworkCore.Abstractions
Microsoft.EntityFrameworkCore.Relational
Microsoft.EntityFrameworkCore.Analyzers
EF Core 的 C# 分析器
我們還發布了Microsoft.Data.Sqlite.Core 7.0 預覽版 1 為 ADO.NET.。
Microsoft.EntityFrameworkCore
https://www.nuget.org/packages/Microsoft.EntityFrameworkCore/7.0.0-preview.4.22229.2
Microsoft.EntityFrameworkCore.SqlServer
https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.SqlServer/7.0.0-preview.4.22229.2
Microsoft.EntityFrameworkCore.SqlServer.NetTopologySuite
https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.SqlServer.NetTopologySuite/7.0.0-preview.4.22229.2
Microsoft.EntityFrameworkCore.Sqlite
https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.Sqlite/7.0.0-preview.4.22229.2
Microsoft.EntityFrameworkCore.Sqlite.Core
https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.Sqlite.Core/7.0.0-preview.4.22229.2
Microsoft.EntityFrameworkCore.Sqlite.NetTopologySuite
https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.Sqlite.NetTopologySuite/7.0.0-preview.4.22229.2
Microsoft.EntityFrameworkCore.Cosmos
https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.Cosmos/7.0.0-preview.4.22229.2
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
Microsoft.EntityFrameworkCore.Design
https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.Design/7.0.0-preview.4.22229.2
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
Microsoft.EntityFrameworkCore.Relational
https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.Relational/7.0.0-preview.4.22229.2
Microsoft.EntityFrameworkCore.Analyzers
https://www.nuget.org/packages/Microsoft.EntityFrameworkCore.Analyzers/7.0.0-preview.4.22229.2
腳手架
https://docs.microsoft.com/ef/core/managing-schemas/scaffolding
遷移
https://docs.microsoft.com/ef/core/managing-schemas/migrations/
Microsoft.Data.Sqlite.Core 7.0
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

每日builds
https://github.com/aspnet/AspNetCore/blob/master/docs/DailyBuilds.md

文檔和反饋

歡迎在dotnet/efcore GitHub 存儲庫上提交發現的問題和任何其他反饋。
歡迎在dotnet/efcore GitHub 存儲庫
https://github.com/dotnet/efcore/issues/11597

有用的網址


來自團隊的感謝


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