Entity Framework 7预览版4特点展示及安装使用教程

109 阅读5分钟

今天,.NET数据团队宣布了EF Core 7.0(EF7)的第四个预览版。 除了错误修复和较大功能的基础工作外,这个预览版还包括更新,以确保转换器和比较器由类型映射处理,并支持使用转换器与值生成器。请务必阅读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的无限资源,而不是更有限的、无聊的、有顺序的可用整数,由于key类提供的缓冲区,你的重构会更容易。 你还可以通过验证来保护key不受坏数据的影响,这样就不会有人意外地分配一个负值。说到意外,你是否曾把错误的id传给一个接受key的方法?编译器并不在意,因为它都是ints......或字节......或1和0......但如果你使用强类型的键,你将被迫提供适合的键,咳,"老爹式笑话 " 。否则,编译器会抱怨。

当然,你是否使用这种方法取决于你,但在预览版4之前,EF Core中的选择是有限的。从实体转换到标量的最明显的方法是使用转换器,但是如果你试图将一个转换器分配给一个标记为值生成的属性,EF Core会抛出一个异常。这个限制已经被取消了,更重要的是,代码已经更新,以确保这种情况得到正确处理。感谢81位为这个问题投票的人,它被列为优先事项,现在可以供你试用了。如果你正在使用这个功能,请告诉我们,它对你的效果如何

前提条件

  • EF7目前的目标是.NET 6。当我们接近发布时,这可能会被更新为.NET 7。
  • EF7将不会在.NET框架上运行。

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独立于特定数据库提供者的主要EF Core包。
Microsoft.EntityFrameworkCore.SqlServerMicrosoft SQL Server和SQL Azure的数据库提供商。
Microsoft.EntityFrameworkCore.SqlServer.NetTopologySuiteSQL Server对空间类型的支持
Microsoft.EntityFrameworkCore.SqliteSQLite的数据库提供者,包括数据库引擎的本地二进制文件
Microsoft.EntityFrameworkCore.Sqlite.Core用于SQLite的数据库提供者,没有打包的本地二进制文件
Microsoft.EntityFrameworkCore.Sqlite.NetTopologySuiteSQLite对空间类型的支持
微软.EntityFrameworkCore.Cosmos用于Azure Cosmos DB的数据库提供商
Microsoft.EntityFrameworkCore.InMemory内存数据库提供者
微软.EntityFrameworkCore.Tools用于Visual Studio Package Manager Console的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#分析器

我们还发布了用于ADO.NETMicrosoft.Data.Sqlite.Core提供者的7.0预览版1版。

安装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 

在使用旧版本的EF Core运行时的项目中使用这个新版本的EF7 CLI是可能的。

日常构建

EF7预览版与.NET 7预览版是一致的。这些预览版往往滞后于EF7的最新工作。考虑使用日常构建来获得最新的EF7功能和错误修复。

与预览版一样,日常构建需要.NET 6。

.NET数据社区的准备工作

.NET数据团队现在每隔周三在太平洋时间上午10点,东部时间下午1点,或UTC时间17点进行直播。加入流媒体,就您选择的数据相关主题提出问题,包括最新的预览版。

文档和反馈

所有EF Core文档的起点是docs.microsoft.com/ef/

请在dotnet/efcore GitHub repo上提交发现的问题和任何其他反馈。

有用的链接

以下链接是为方便参考和访问而提供的。

来自团队的感谢

EF团队对多年来使用EF并为之做出贡献的所有人表示衷心的感谢!