原文来源 TechViews

今天我们将推出EF Core 2.2的最终版本,以及ASP.NET Core 2.2.NET Core 2.2 。这是我们的开源和跨平台对象数据库映射技术的最新版本。

EF Core 2.2 RTM包含一百多个错误修复和一些新功能:

空间数据支持

空间数据可用于表示对象的物理位置和形状。许多数据库可以本地存储,索引和查询空间数据。常见方案包括查询给定距离内的对象,以及测试多边形是否包含给定位置。 EF Core 2.2现在支持使用NetTopologySuite (NTS)库中的类型处理来自各种数据库的空间数据。

空间数据支持是作为一系列特定于提供者的扩展包实现的。这些包中的每一个都为NTS类型和方法以及数据库中相应的空间类型和功能提供映射。此类提供程序扩展现在可用于SQL ServerSQLitePostgreSQL (来自Npgsql项目 )。空间类型可以直接与EF Core内存提供程序一起使用,无需额外扩展。

安装提供程序扩展后,可以向实体添加支持的类型的属性。例如:

 using NetTopologySuite.Geometries;

namespace MyApp

{

public class Friend

{

[Key]

public string Name { get; set; }
[Required]
public Point Location { get; set; }

}

}

然后,您可以使用空间数据保留实体:

 using (var context = new MyDbContext())

{

context.Add(

new Friend

{

Name = "Bill",

Location = new Point(-122.34877, 47.6233355) {SRID = 4326 }

});

context.SaveChanges();

}

您可以根据空间数据和操作执行数据库查询:

   var nearestFriends =

(from f in context.Friends

orderby f.Location.Distance(myLocation) descending

select f).Take(5).ToList();

有关此功能的更多信息,请参阅空间数据文档

拥有实体的集合

EF Core 2.0增加了在一对一关联中建立所有权模型的能力。 EF Core 2.2扩展了将所有权表达为一对多关联的能力。所有权有助于限制实体的使用方式。

例如,拥有的实体: - 只能出现在其他实体类型的导航属性上。 - 自动加载,并且只能由DbContext与其所有者一起跟踪。

在关系数据库中,拥有的集合映射到所有者的单独表,就像常规的一对多关联一样。但是在面向文档的数据库中,我们计划将拥有的实体(在拥有的集合或引用中)嵌套在与所有者相同的文档中。

您可以通过调用新的OwnsMany()API来使用该功能:

 modelBuilder.Entity<Customer>().OwnsMany(c => c.Addresses); 

有关更多信息,请参阅更新的自有实体文档

查询标签

此功能简化了代码中的LINQ查询与日志中捕获的生成的SQL查询的关联。

要利用查询标记,请使用新的TagWith()方法注释LINQ查询。使用前一个示例中的空间查询:

   var nearestFriends =

(from f in context.Friends.TagWith(@"This is my spatial query!")

orderby f.Location.Distance(myLocation) descending

select f).Take(5).ToList();

此LINQ查询将生成以下SQL输出:

 -- This is my spatial query!

SELECT TOP(@__p_1) [f].[Name], [f].[Location]

FROM [Friends] AS [f]

ORDER BY [f].[Location].STDistance(@__myLocation_0) DESC

有关更多信息,请参阅查询标记文档

获得EF Core 2.2

EF Core NuGet包可以在NuGet Gallery上获得 ,也可以作为ASP.NET Core 2.2新的.NET Core SDK的一部分

如果要在基于ASP.NET Core的应用程序中使用EF Core,我们建议您首先将应用程序升级到ASP.NET Core 2.2

通常,在应用程序中使用EF Core的最佳方法是为应用程序将使用的提供程序安装相应的NuGet包。例如,要从命令行在.NET Core项目中添加2.2版本的SQL Server提供程序,请使用:

 $ dotnet add package Microsoft.EntityFrameworkCore.SqlServer -v 2.2.0 

或者从Visual Studio中的程序包管理器控制台:

 PM> Install-Package Microsoft.EntityFrameworkCore.SqlServer -Version 2.2.0 

有关如何将EF Core添加到项目的更多信息,请参阅有关安装Entity Framework Core的文档

与EF Core 2.1的兼容性

我们花了很多时间和精力确保EF Core 2.2向后兼容现有的EF Core 2.1提供程序,并且更新应用程序以在EF Core 2.2上构建不会导致兼容性问题。我们预计大多数升级都会顺利进行,但如果您发现任何意外问题,请向我们的问题跟踪器报告。

EF Core 2.2中存在一个已知的更改,可能需要在应用程序代码中进行少量更新。有关更多详细信息,请阅读以下问题的说明:

  • #13986配置为拥有实体和常规实体的类型需要在从2.1升级到2.2后定义主键

我们打算维护一份可能需要调整问题跟踪器上现有代码的问题列表。

接下来是什么:EF Core 3.0

随着EF Core 2.2的出现,我们的主要关注点是EF Core 3.0。我们仍需要弄清楚下一个主要版本的几个细节,但这里是我们目前所知的一些主要主题:

  • LINQ改进 :LINQ使您能够在不离开您选择的语言的情况下编写数据库查询,利用丰富的类型信息来获取IntelliSense和编译时类型检查。但LINQ还使您能够编写无限数量的复杂查询,这对LINQ提供商来说一直是一个巨大的挑战。在EF Core的前几个版本中,我们通过弄清楚查询的哪些部分可以转换为SQL,然后允许其余查询在客户端的内存中执行来解决。在某些情况下,此客户端执行可能是合乎需要的,但在许多其他情况下,它可能导致在将应用程序部署到生产之前可能无法识别的低效查询。在EF Core 3.0中,我们计划对LINQ实现的工作方式以及测试方式进行深刻的更改。目标是使其更加健壮(例如,避免破坏补丁版本中的查询),能够将更多表达式正确地转换为SQL,在更多情况下生成有效查询,并防止低效查询未被检测到。
  • Cosmos DB支持 :我们正在为EF Core开发Cosmos DB提供程序,使熟悉EF编程模型的开发人员能够轻松地将Azure Cosmos DB作为应用程序数据库。目标是利用Cosmos DB的一些优势,如全局分发,“始终在线”可用性,弹性可伸缩性和低延迟,.NET开发人员更容易访问。提供程序将针对Cosmos DB中的SQL API启用大多数EF Core功能,如自动更改跟踪,LINQ和值转换。我们在EF Core 2.2之前就开始了这项工作, 我们已经提供了一些提供商的预览版本 。新计划是继续与EF Core 3.0一起开发提供商。
  • C#8.0支持 :我们希望我们的客户能够利用C#8.0中的一些新功能,例如异步流(包括等待每个)和使用EF Core时可以为空的引用类型。
  • 将数据库视图反转为查询类型:在EF Core 2.1中,我们添加了对查询类型的支持,查询类型可以表示可以从数据库读取但无法更新的数据。查询类型非常适合映射数据库视图,因此在EF Core 3.0中,我们希望自动创建数据库视图的查询类型。
  • 属性包实体 :此功能是关于启用在索引属性中存储数据而不是常规属性的实体,以及是否能够使用相同.NET类的实例(可能像Dictionary<string, object>这样简单的实例)表示同一EF Core模型中的不同实体类型。此功能是支持多对多关系的垫脚石,没有连接实体,这是EF Core最需要的改进之一。
  • .NET Core上的EF 6.3 :我们知道许多现有应用程序使用以前版本的EF,并且将它们移植到EF Core只是为了利用.NET Core有时需要付出巨大努力。出于这个原因,我们将调整下一版本的EF 6以在.NET Core 3.0上运行。我们这样做是为了便于以最小的更改移植现有的应用程序。会有一些限制(例如,它将需要新的提供程序,不会启用SQL Server的空间支持),并且没有为EF 6计划的新功能。

谢谢

EF团队感谢大家对EF Core 2.2的所有社区反馈和贡献。再一次,您可以报告在我们的问题跟踪器中找到的任何新问题。

[翻译]EntityFramework Core 2.2 发布的更多相关文章

  1. [翻译] .NET Core 2.1 发布

    原文: Announcing .NET Core 2.1 我们很高兴可以发布 .NET Core 2.1.这次更新包括对性能的改进,对运行时和工具的改进.还包含一种以 NuGet 包的形式部署工具的新 ...

  2. [翻译] .NET Core 2.1 Preview 1 发布

    [翻译] .NET Core 2.1 Preview 1 发布 原文: Announcing .NET Core 2.1 Preview 1 今天,我们宣布发布 .NET Core 2.1 Previ ...

  3. [翻译] .NET Core 3.0 Preview 7 发布

    原文: Announcing .NET Core 3.0 Preview 7 今天,我们宣布推出 .NET Core 3.0 Preview 7 .我们的工作已经从创建新功能过渡到打磨版本.预计剩余的 ...

  4. EntityFramework 7 更名为EntityFramework Core(预发布状态)

    前言 最近很少去学习和探索新的东西,尤其是之前一直比较关注的EF领域,本身不太懒,但是苦于环境比较影响自身的心情,所以迟迟没有下笔,但是不去学习感觉在精神层面缺少点什么,同时也有园友说EF又更新了,要 ...

  5. EntityFramework Core 运行dotnet ef命令迁移背后本质是什么?(EF Core迁移原理)

    前言 终于踏出第一步探索EF Core原理和本质,过程虽然比较漫长且枯燥乏味还得反复论证,其中滋味自知,EF Core的强大想必不用我再过多废话,有时候我们是否思考过背后到底做了些什么,到底怎么实现的 ...

  6. Cookies 初识 Dotnetspider EF 6.x、EF Core实现dynamic动态查询和EF Core注入多个上下文实例池你知道有什么问题? EntityFramework Core 运行dotnet ef命令迁移背后本质是什么?(EF Core迁移原理)

    Cookies   1.创建HttpCookies Cookie=new HttpCookies("CookieName");2.添加内容Cookie.Values.Add(&qu ...

  7. EntityFramework Core 1.1有哪些新特性呢?我们需要知道

    前言 在项目中用到EntityFramework Core都是现学现用,及时发现问题及时测试,私下利用休闲时间也会去学习其他未曾遇到过或者用过的特性,本节我们来讲讲在EntityFramework C ...

  8. EntityFramework Core不得不注意的性能优化意外收获,你会用错?

    前言 这两天在着实研究EF Core项目当中对于一些查询也没实际去检测,于是想着利用放假时间去实际测试下,结果本文就出来了,too young,too simple,后续博主会从底层翻译表达式树弄起, ...

  9. EntityFramework Core迁移时出现数据库已存在对象问题解决方案

    前言 刚开始接触EF Core时本着探索的精神去搞,搞着搞着发现出问题了,后来就一直没解决,觉得很是不爽,借着周末好好看看这块内容. EntityFramework Core迁移出现对象在数据库中已存 ...

随机推荐

  1. 20175316 盛茂淞 实验一 Java开发环境的熟悉

    20175316 盛茂淞 实验一 Java开发环境的熟悉 实验目的 使用JDK编译.运行简单的Java程序 实验要求 1.建立"自己学号exp1"的目录 2.在"自己学号 ...

  2. javascript跨域传递消息 / 服务器实时推送总结

    参考文档,下面有转载[非常好的两篇文章]: http://www.cnblogs.com/loveis715/p/4592246.html [跨源的各种方法总结] http://kb.cnblogs. ...

  3. 10.18 nslookup:域名查询工具

    功能说明 nslookup命令是常用的域名解析查询工具. 如果系统没有nslookup命令,则需要安装下面的软件包: yum-y inatall bind-otil9   语法格式 nslookup ...

  4. Codeforces Round #486 (Div. 3) E. Divisibility by 25

    Codeforces Round #486 (Div. 3) E. Divisibility by 25 题目连接: http://codeforces.com/group/T0ITBvoeEx/co ...

  5. 【pycharm 警告】unittest RuntimeWarning: Parent module ” not found while handling absolute import

    Pycharm 2016.2执行单元测试遇到如下问题: RuntimeWarning: Parent module ‘YOUR_MODULE_HERE’ not found while handlin ...

  6. appendChild()方法遇到的问题

    在使用appendChild()方法中遇到了一个问题: 下面的代码可以正常插入多个新元素 <input type="button" value="在后面插入新元素& ...

  7. Delphi调用SQL分页存储过程实例

    Delphi调用SQL分页存储过程实例 (-- ::)转载▼ 标签: it 分类: Delphi相关 //-----下面是一个支持任意表的 SQL SERVER2000分页存储过程 //----分页存 ...

  8. ASP.NET MVC下使用AngularJs语言(一):Hello your name

    新春节后,分享第一个教程. 是教一位新朋友全新学习ASP.NET MVC下使用AngularJs语言. 一,新建一个空的Web项目.使用NuGet下载AngularJs和jQuery.二,配置Bund ...

  9. 【spring源码分析】IOC容器初始化——查漏补缺(一)

    前言:在[spring源码分析]IOC容器初始化(十一)中提到了初始化bean的三个步骤: 激活Aware方法. 后置处理器应用(before/after). 激活自定义的init方法. 这里我们就来 ...

  10. SpringDataSolr 过滤(或者叫筛选)查询

    // 被本类调用 private Map searchList(Map searchMap) { // 1.1关键字查询 SimpleHighlightQuery highlightQuery = n ...