近期.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 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 并描述了它们的用途。
- 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 存储库上提交发现的问题和任何其他反馈。
有用的网址
提供以下链接以方便参考和访问。
- 主要文档https://aka.ms/efdocs
- EF Core 的问题和功能请求https://aka.ms/efcorefeedback
- 实体框架路线图https://aka.ms/efroadmap
- 双周更新https://github.com/dotnet/efc...
来自团队的感谢
EF 团队非常感谢多年来使用并为 EF 做出贡献的所有人!欢迎来到 EF7。
长按识别二维码
关注微软中国MSDN