close

點擊上方藍字




關注我們

(本文閱讀時間:5分鐘)


近期.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

獨立於特定數據庫提供程序的主 EF Core 包

Microsoft.EntityFrameworkCore.SqlServer

Microsoft SQL Server 和 SQL Azure 的數據庫提供程序

Microsoft.EntityFrameworkCore.SqlServer.NetTopologySuite

SQL Server 對空間類型的支持

Microsoft.EntityFrameworkCore.Sqlite

SQLite 的數據庫提供程序,包括數據庫引擎的本機二進制文件

Microsoft.EntityFrameworkCore.Sqlite.Core

SQLite 的數據庫提供程序,沒有打包的本機二進制文件

Microsoft.EntityFrameworkCore.Sqlite.NetTopologySuite

SQLite 對空間類型的支持

Microsoft.EntityFrameworkCore.Cosmos

Azure Cosmos DB 的數據庫提供程序

Microsoft.EntityFrameworkCore.InMemory

內存數據庫提供程序

Microsoft.EntityFrameworkCore.Tools

用於 Visual Studio 包管理器控制台的 EF Core PowerShell 命令;使用它來將腳手架和遷移等工具與 Visual Studio集成

Microsoft.EntityFrameworkCore.Design

EF Core 工具的共享設計時組件

Microsoft.EntityFrameworkCore.Proxies

延遲加載和更改跟蹤代理

Microsoft.EntityFrameworkCore.Abstractions

解耦 EF Core 抽象;將此用於 EF Core 定義的擴展數據注釋等功能

Microsoft.EntityFrameworkCore.Relational

用於關係數據庫提供程序的共享 EF Core 組件

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


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

歡迎在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。

謝謝你讀完了本文!歡迎在評論區留言分享你的想法,並且轉發到朋友圈。
如果你對本文青睞有加,想要轉載到自己的平台,請在後台回復「轉載」與我們取得聯繫!

長按識別二維碼

關注微軟中國MSDN




EF7 的完整計劃
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 鑽石舞台 的頭像
    鑽石舞台

    鑽石舞台

    鑽石舞台 發表在 痞客邦 留言(0) 人氣()