关注我们
作者: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。