头图

近期.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 的完整计划


微软技术栈
418 声望994 粉丝

微软技术生态官方平台。予力众生,成就不凡!微软致力于用技术改变世界,助力企业实现数字化转型。