请查收最新的 EF Core 7.0 更新

关注我们

作者: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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值