

【译】Announcing Entity Framework Core 5.0 Preview 5
source link: https://www.cnblogs.com/MeteorSeed/p/13155452.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

今天我们宣布EF Core 5.0发布第五个预览版。
1 先决条件
EF Core 5.0 的预览版要求 .NET Standard 2.1。这意味着:
-
-
-
EF Core 5.0 在 .NET Core 3.1 上运行,不需要 .NET 5。根据 .NET 5 计划的改变,这可能会在未来发生变化。
-
EF Core 5.0 运行在其他支持 .NET Standard 2.1 的平台上。
-
EF Core 5.0 将不会在 .NET Standard 2.0 平台上运行,包括 .NET Framework。
-
-
2 如何获取EF Core 5.0预览版
使用NuGet添加,例如添加SQL Server的提供程序:
dotnet add package Microsoft.EntityFrameworkCore.SqlServer --version 5.0.0-preview.5.20278.2
目前发布的 EF Core包包括:
-
-
-
Microsoft.EntityFrameworkCore – 主程序
-
Microsoft.EntityFrameworkCore.SqlServer – SQL Server与SQL Azure提供者
-
Microsoft.EntityFrameworkCore.Sqlite – SQLite提供者
-
Microsoft.EntityFrameworkCore.Cosmos – Azure Cosmos DB提供者
-
Microsoft.EntityFrameworkCore.InMemory – 内存数据库提供者
-
Microsoft.EntityFrameworkCore.Tools –Visual Studio Package Manager Console的 EF Core PowerShell命令
-
Microsoft.EntityFrameworkCore.Design – EF Core的设计时组件
-
Microsoft.EntityFrameworkCore.SqlServer.NetTopologySuite – SQL Server 空间类型支持
-
Microsoft.EntityFrameworkCore.Sqlite.NetTopologySuite – SQLite空间类型支持
-
Microsoft.EntityFrameworkCore.Proxies –延迟加载与变化跟踪代理
-
Microsoft.EntityFrameworkCore.Abstractions – 分离的EF Core抽象
-
Microsoft.EntityFrameworkCore.Relational – 关系数据库提供程序的共享EF Core组件
-
Microsoft.EntityFrameworkCore.Analyzers – EF Core的C#分析器
-
Microsoft.EntityFrameworkCore.Sqlite.Core – SQLite提供者(没有打包的本机二进制文件)
-
-
我们还发布了Microsoft.Data.Sqlite.Core ADO.NET provider的预览版。
3 安装dotnet ef
与EF Core 3.0和3.1一样,dotnet EF命令行工具不再包含在.NET Core SDK中。在执行EF Core的migration或scaffolding命令之前,必须将此包作为全局或本地工具安装。

若要全局安装预览版工具,需要先使用以下命令卸载现有的版本:
dotnet tool uninstall --global dotnet-ef
然后,进行安装:
dotnet tool install --global dotnet-ef --version 5.0.0-preview.5.20278.2
可以将此新版本的dotnet ef与使用较旧版本的EF Core运行时的项目一起使用。
4 EF Core 5.0预览版的一些新功能
4.1 数据库排序规则
现在可以在 EF Model中指定数据库的默认排序规则。
modelBuilder.UseCollation("German_PhoneBook_CI_AS");
然后,Migrations将生成以下内容以在 SQL Server 上创建数据库:
CREATE DATABASE [Test] COLLATE German_PhoneBook_CI_AS;
也可以指定用于特定数据库列的排序规则。
modelBuilder .Entity<User>() .Property(e => e.Name) .UseCollation("German_PhoneBook_CI_AS");
为了那些不使用migration的人,现在,在 DbContext scaffolding时,将从数据库进行反向工程。最后,EF.Functions.Collate() 允许使用不同的排序规则进行临时查询。
context.Users.Single(e => EF.Functions.Collate(e.Name, "French_CI_AS") == "Jean-Michel Jarre");
这将生成 SQL Server 的以下查询:
SELECT TOP(2) [u].[Id], [u].[Name] FROM [Users] AS [u] WHERE [u].[Name] COLLATE French_CI_AS = N'Jean-Michel Jarre'
请注意,临时排序规则应谨慎使用,因为它们会对数据库性能产生负面影响。
4.2 传递参数给IDesignTimeDbContextFactory
参数现在从命令行传入IDesignTimeDbContextFactory 的 CreateDbContext 方法。
例如,为了指示这是开发构建,可以在命令行上传递自定义参数(例如 dev):
dotnet ef migrations add two --verbose --dev
然后,此参数将传递到工厂:
public class MyDbContextFactory : IDesignTimeDbContextFactory<SomeDbContext> { public SomeDbContext CreateDbContext(string[] args) => new SomeDbContext(args.Contains("--dev")); }
4.3 具有标识解析的无跟踪查询
现在,可以将无跟踪查询配置为执行标识解析。
例如,以下查询将为每个Post创建新的Blog实例,即使每个Blog具有相同的主键也是如此。
context.Posts.AsNoTracking().Include(e => e.Blog).ToList();
但是,可以更改此查询以确保只创建单个 Blog 实例,但代价通常是稍微慢一点,并且使用更多内存:
context.Posts.AsNoTracking().PerformIdentityResolution().Include(e => e.Blog).ToList();
请注意,这仅适用于无跟踪查询,因为所有跟踪查询都已表现出此行为。
4.4 持久化计算列
大多数数据库允许在计算后存储计算列的值。
虽然这占用磁盘空间,但计算列在更新时只计算一次,而不是在每次检索其值时计算。
这还允许对某些数据库的列设置索引。
EF Core 5.0 允许将计算列配置为存储列。
modelBuilder .Entity<User>() .Property(e => e.SomethingComputed) .HasComputedColumnSql("my sql", stored: true);
4.5 SQLite计算列
EF Core 现在支持 SQLite 数据库的计算列。
5 有用的短链接
提供了以下短链接,便于参考和访问。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK