zoukankan      html  css  js  c++  java
  • 【译】Announcing Entity Framework Core 5.0 Preview 5

      今天我们宣布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 有用的短链接

      提供了以下短链接,便于参考和访问。

    原文链接

      https://devblogs.microsoft.com/dotnet/announcing-entity-framework-core-5-0-preview-5/?utm_source=vs_developer_news&utm_medium=referral

  • 相关阅读:
    OM Shipping 授权
    Account Summary 汇总模板
    OM Record is currently being worked on by another user, Please try to update it later.
    Initialization SQL Statement – Custom 配置错误,导致无法加载FORM
    ReOpen a Closed Inventory Accounting Period [ID 472631.1]
    IBM AIX User Lists
    Killing Oracle Sessions
    APPFND01016 (GL > Setup > Flexfields > Key > Rules)
    OM: release hold的时候,又遇到限制:You are not authorized to release this hold.
    SO History
  • 原文地址:https://www.cnblogs.com/MeteorSeed/p/13155452.html
Copyright © 2011-2022 走看看