今天,Entity Framework Core团队宣布了EF Core 6.0的第六个预览版本。该团队继续在你帮助确定优先级的功能上工作。除了增加新的功能外,我们正在缩小EF Core和EF6之间的差距。问题#24106分享了关于差异的细节和我们消除差异的路线图。我们在迁移包和Azure Cosmos DB提供商中的隐含所有权等功能上取得了进展,但还没有完全准备好让你测试它们。不过,现在下载预览版6就可以获得许多更新(具体方法见本博文末尾)。
从预览版6开始,EF Core 6以.NET 6目标框架名称(TFM)为目标。
这个版本的几个亮点包括:
- 支持64位身份种子值
- 支持SQLite的新BCL
DateOnly和TimeOnly结构 - Uniquify和验证检查约束的名称
- 公约前的模型配置
- 此列表中的项目
这个版本支持公约前的模型配置。当很容易区分可能的标量属性和可能的导航属性时,仅根据DbSet 根对模型进行初始发现是一种合理的方法。然而,随着我们允许越来越多的类型被映射,越来越多的问题出现了:
- 将一个类型排除在实体类型之外,从而避免试图将它和它的所有属性带入模型之中
- 当发现一个值转换器或该类型被忽略时,将一个类型从实体类型中还原出来
这导致了错误和额外的开销。这个版本,我们专注于寻找增强模型构建的方法,以便它能更有效地弄清什么是实体类型,什么不是。例如,假设你总是将字符串数据存储为字节数组。与其配置每一个实体,你可以使用ConfigureConventions 覆盖。它看起来像这样:
protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder)
{
configurationBuilder.Properties<string>()
.HaveConversion<byte[]>()
.HaveMaxLength(255);
configurationBuilder.IgnoreAny<INonPersisted>();
}
我们想听听你的意见! 如果你和/或你的团队正在使用实体框架设计器(Visual Studio中EDMX文件的可视化编辑器),我们想了解你是如何使用设计器的,以及什么可能会阻止你迁移到最新的代码库中。请在问题#25248上发表评论,给我们提供反馈。
如何获得EF Core 6.0预览版
EF Core是以一组NuGet包的形式专门发布的。例如,要在你的项目中添加SQL Server提供者,你可以使用dotnet工具使用以下命令:
dotnet add package Microsoft.EntityFrameworkCore.SqlServer --version 6.0.0-preview.6.21352.1
下表链接到EF Core 6.0的预览6版本的软件包,并描述了它们的用途:
| 包 | 目的 |
|---|---|
| Microsoft.EntityFrameworkCore | 独立于特定数据库提供者的主要EF Core包。 |
| Microsoft.EntityFrameworkCore.SqlServer | Microsoft SQL Server和SQL Azure的数据库提供商。 |
| Microsoft.EntityFrameworkCore.SqlServer.NetTopologySuite | SQL Server对空间类型的支持 |
| Microsoft.EntityFrameworkCore.Sqlite | SQLite的数据库提供者,包括数据库引擎的本地二进制文件 |
| Microsoft.EntityFrameworkCore.Sqlite.Core | 用于SQLite的数据库提供者,没有打包的本地二进制文件 |
| Microsoft.EntityFrameworkCore.Sqlite.NetTopologySuite | SQLite对空间类型的支持 |
| 微软.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.NET的Microsoft.Data.Sqlite.Core提供者的6.0预览6版。