您现在的位置是:首页 > 文章详情

Entity Framework Core 3.0 和 Entity Framework 6.3 正式发布

日期:2019-09-24点击:641

Entity Framework Core 3.0 和 Entity Framework 6.3 通用版发布了,接下来我们看看它的新内容:

Entity Framework Core 3.0

EF Core 3.0 包括主要特性、小部分增强和错误修复,以下是一些重要内容:

LINQ overhaul

重构了 LINQ Provider,以便能够将更多的查询模式转换为 SQL,在更多情况下生成高效的查询,并防止低效率的查询无法被检测到。新的 LINQ Provider 是能在未来版本中提供新的查询功能和性能改进的基础,而不会破坏现有的应用程序和数据提供程序。

Cosmos DB 支持

EF Core 的 Cosmos DB Provider 让熟悉 EF 编程模型的开发人员能够轻松地将 Azure Cosmos DB 作为应用程序数据库。其目标是使 Cosmos DB 的一些优点,如全球分布(Global distribution)、“always on”可用性、弹性可伸缩性和低延迟,被 .NET 开发人员更容易访问。Cosmos DB Provider 针对 Cosmos DB 中的 SQL API 启用了大多数 EF Core 功能,如自动更改跟踪、LINQ 和值转换。

C# 8.0 支持

EF Core 3.0 利用了 C# 8.0 中的一些新特性:

  • 异步流:异步查询结果现在使用新标准 IAsyncEnDigable<T> 接口公开,并且可以使用 await foreach
  • 可空引用类型:在代码中启用此新功能时,EF Core 检查引用类型属性的空值性,并将其应用于数据库中相应的列和关系

拦截数据库操作 

EF Core 3.0 中的包含新的 API,用于拦截数据库操作。这与 EF 6 中存在的截取功能非常相似,它允许编写简单的逻辑,只要打开数据库连接、提交事务或执行查询,EFCore 就会自动调用该逻辑。拦截器通常允许在操作发生之前或之后拦截它们。当在它们发生之前拦截它们时,可以旁路执行并提供截取逻辑的备用结果。

例如,要操作命令文本,可以创建一个 IDbCommandInterceptor:

 public class HintCommandInterceptor : DbCommandInterceptor { public override InterceptionResult ReaderExecuting( DbCommand command, CommandEventData eventData, InterceptionResult result) { // Manipulate the command text, etc. here... command.CommandText += " OPTION (OPTIMIZE FOR UNKNOWN)"; return result; } }

并将其注册到你的 DbContext 中:

 services.AddDbContext(b => b .UseSqlServer(connectionString) .AddInterceptors(new HintCommandInterceptor()));

数据库视图的逆向工程

Query Types(表示可以从数据库读取但未更新的数据),现在重命名为 keyless entity types。由于 EF Core 非常适合在大多数场景中映射数据库视图,所以现可在反向工程数据库视图时自动创建 keyless entity types。

例如,使用 DotNet EF 命令行工具(dotnet ef command-line tool),键入:

 dotnet ef dbcontext scaffold "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer 

该工具将自动为没有键的视图和表,提供 scaffold types:

 protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Names>(entity => { entity.HasNoKey(); entity.ToView("Names"); }); modelBuilder.Entity<Things>(entity => { entity.HasNoKey(); }); }

与主体共享表的依赖实体是可选的

从 EF Core 3.0 开始,如果 OrderDetails 属于 Order 或显式映射到同一个表,则可以在没有 OrderDetails 和所有 OrderDetails 属性的情况下添加 Order,但主键将映射到可空列。

当查询时,如果它必要属性不存在值,或者它除了主键之外没有必要属性,EF Core 会将 OrderDetails 设置为 null。

 public class Order { public int Id { get; set; } public int CustomerId { get; set; } public OrderDetails Details { get; set; } } [Owned] public class OrderDetails { public int Id { get; set; } public string ShippingAddress { get; set; } }

Entity Framework 6.3

最新版本的 EF 6 移植到 .NET Core 3.0 上,以下是一些最显著的改进:

  • 支持 .NET Core 3.0
    • 除了 .NET Framework 4.0 和 4.5 之外,EF 6.3 runtime 包现支持 .NET Standard 2.1
    • 迁移命令已被重写,以执行进程外和使用 SDK 样式的项目
  • 对 SQL Server 层次结构的支持 
  • 改进与 Roslyn 和 NuGet PackageReference 的兼容性
  • 添加了 ef6.exe 实用程序,取代了 portate.exe,用于启用、添加、编写脚本和应用来自程序集的迁移

在 .NET Core 中使用 EF 6.3 有一定的限制。例如:

  • 数据提供程序也需要移植到 .NET Core。然而只移植了包含在 EF 6.3 包中的 SQL Server 提供程序
  • spatial 支持不会在 SQL Server 中启用,因为 spatial 类型无法使用 .NET Core
  • 目前不支持在 .NET Core 或 .NET Standard 项目上直接使用 EF designer

详情见发布说明:

https://devblogs.microsoft.com/dotnet/announcing-ef-core-3-0-and-ef-6-3-general-availability/ 

原文链接:https://www.oschina.net/news/110116/entity-framework-core-3-0-and-entity-framework-6-3-released
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章