速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

Entity Framework 6.3 和 EF Core 3.0 路线图

  • 2019-01-09
  • 本文字数:2264 字

    阅读完需:约 7 分钟

Entity Framework 6.3 和EF Core 3.0路线图

尽管脱离了 .NET Core 发布循环,但是 EF Core 正在开发其 3.0 路线图。除此之外,还对原来的 Entity Framework 进行了一些重要的变更。

基于 .NET Core 3 的 Entity Framework 6.3

首先,Entity Framework 已经结束了。从功能方面,已经没有新的东西要加入到 Entity Framework 6.x 系列,而且不太可能出现 Entity Framework 7 了。


即便如此,Entity Framework 还没有被完全遗忘。Microsoft 已经认识到将遗留数据库代码从 EF 6 转移到 EF Core 并非一件易事,这也是采用 .NET Core 的一大障碍。


目前的计划是提供运行在 .NET Core 上的 Entity Framework 的旁支版本。这需要全新的特定于数据库的提供程序。另外,有些功能(比如 SQL Server 的空间数据)将不被支持。


本文中的其余内容适用于 EF Core。

更多服务器端的查询

将 LINQ 查询转换为对应的 SQL 查询通常是比较困难的,甚至是不可能的。许多 QRM 只能在转换失败时抛出一个运行时异常来解决这个问题,但是 EF Core 做了更多的尝试。当不能完全理解 LINQ 查询时,它会将其部分转换为 SQL,之后在客户端执行剩下的操作。尽管这可能会导致性能不好,很多开发人员更喜欢这种方案,而不是查询直接失败。


Diego B Vega写道,


在 EF Core 3.0 中,我们计划对 LINQ 实施和测试的方法进行重大变更。目标是让它变得更加健壮(比如说,避免在补丁发布版本中破坏查询),让更多表达式准确转换为 SQL,在更多情况下生成有效的查询,防止没有检测到效率低下的查询的情况发生。

NoSQL 支持

很长一段时间,人们都希望 ORM 可以无缝地处理 SQL 和 NoSQL 数据库。尽管 Microsoft 一开始宣布它将作为 EF Core 2.1 路线图的一部分,但是公司目前仍然在尝试引入这一功能。新的计划是在 EF Core 3.0 中提供对 Cosmo DB 的支持。

C# 8.0 支持

EF Core 3.0 将成为第一个支持 C# 8 的版本。这主要代表着 API 在更新之后可以包含 [可为空的引用类型]和异步流。关于如何做到这一点仍待确定,因为 EF Core 3.0 的一大目标是保留 .NET Standard 2.0 库。这可能会与 C# 8 的一些功能背道而驰。


因为 .NET Framework 不会支持 C# 8 的所有新功能,所以 Entity Framework 6.3 也不太见得可以支持 C# 8。

更好地支持视图

不像 Entity Framework,EF Core 不能在数据库中为视图产生查询类型。查询类型仅适用于可以从数据库中读取但不能写入的实体。通常,这应该是查询视图、存储过程或表值函数的结果。


代码生成器的这一疏忽预期将在 EF Core 3.0 中修复。

多对多关系

要在 EF Core 中表示多对多关系,目前你需要能表示映射表的“连接实体”。有了“属性包实体”功能之后,EF Core 离摆脱这种需求又更近了一步。


该特性支持实体将数据存储在索引属性中,而不是常规属性中,并且能够使用相同. NET 类的实例(可能简单到 Dictionary<string, object>)来表示相同 EF 核心模型中的不同实体类型。


请注意,Entity Framework 已经在不需要连接实体的情况下支持多对多关系。

不在 EF Core 3.0 路线图上的功能

由于预算有限,并不是所有的需求都能加入到路线图中来。以下这些特性虽然没有加入其中,但也很有必要提一下。

存储过程

EF Core 3.0 timeframe 中不会提供对存储过程的一流支持。可以使用查询类型和原始 SQL 的变通方案。

每个类型继承的表

当表很宽,有很多列的时候,一项解决此问题的技术是每个类型继承的表(Table Per Type inheritance)。使用该模型之后,每行都会被识别为多个子类型之一。每个子类型都有自己的表,表中有这个子类型特有的列。只有所有子类型都有的列才会保留在原始表中。


目前 Entity Framework 支持每个类型继承的表这一功能,但是 EF Core 并不支持。尽管从 2015 年开始,大家都非常希望这个功能可以实现,但它也是很有争议的。对于有些人来说会将它视为反模式,因为如果不恰当使用,它就会损伤性能。


另外一些人认为每个类型继承的表可以提升性能,因为连接原始和子类型表的成本会比处理一个很宽的表来的小。另外,现实世界的数据库已经使用了这种模式,EF Core 需要和这些现有的数据库保持一致。


还有,EF Core 中不需要每个类型继承的表,是因为 Entity Framework 中已经存在了,而且 EF 计划会移植到 .NET Core 中来。人们对此的反驳是,我们可能既需要每个类型继承的表,也需要 EF-Core 独有的功能。

Visual Studio Designer

Diego B Vega 写道:


我们了解设计可能是我们的一些客户使用 EF Core 的一个重要功能,但我们并没有看到很多反馈表示它比我们待办事项中的其他功能更加重要。我们很有兴趣了解你是否尝试代码优先开发,了解你是否知道有工具可以将现有的数据库反向工程到 EF Core 模型。

更新插入

更新插入是有条件地插入或更新一条记录的功能,这被视为 ORM 的第二层功能。尽管没有必要,但拥有它也是很好的,因为它可以减少往返访问数据库的次数,并简化代码。然而,它目前并不适合 EF Core 模型。部分原因是它实现的方式在各个数据库之间存在太大的差异。有些具备明确但独特的语法。有些利用 MERGE 语句,但由于它不是原子性可能会产生问题。还有 Jet/MS-Access 完全不接受更新插入,但是可以用多个查询来模拟。


更新插入目前在 Github 上的 Merge/Upsert/AddOrUpdate 支持思路中讨论。

GraphQL

实现 GraphQL 是非常困难的。这个查询语言非常复杂,如果没有框架或者库来支持它,甚至是部分实现也很难做到。


几年以前 Microsoft 确实曾推出过使用 EF Core 的 GraphQL,但从来没有公开发布过。尽管还有很多 GraphQL 的设计问题需要得到解决,但他们还是希望能在未来真正实现这一功能。


查看英文原文Entity Framework 6.3 and EF Core 3.0 Roadmap


2019-01-09 14:547980
用户头像

发布了 218 篇内容, 共 68.3 次阅读, 收获喜欢 76 次。

关注

评论

发布
暂无评论
发现更多内容

Apache Doris 2.1.3 版本正式发布

SelectDB

数据库 大数据 数据湖 数据分析 物化视图

高并发UE4/UE5像素流送云推流解决方案

点量实时云渲染

ue 像素流送 像素流 像素流送技术 UE4

什么是网络钓鱼攻击

德迅云安全杨德俊

NumPy 随机数据分布与 Seaborn 可视化详解

EquatorCoco

可视化 Numpy

百度发布Comate代码知识增强2.0,国内首个支持实时检索智能代码助手

不叫猫先生

人工智能 百度 AI 百度Comate

Koupleless 内核系列|模块化隔离与共享带来的收益与挑战

SOFAStack

开源 模块 架构治理 蚂蚁集团 单体应用架构

阿布扎比:自 2023 年第一季度以来,资本之都 ADGM 资产管理规模创历史新高的 211%

财见

和鲸携手中国石油大学,助力首届青岛市公共数据创新应用大赛璀璨启程

ModelWhale

公共数据

鸿蒙快速开发该如何下手?

Geek_2305a8

博思白板可以画思维导图吗?boardmix常见问题解答!

彭宏豪95

效率工具 在线白板 办公软件 在线协同 在线协作

加速企业上云数智化创新,云耀X实例有妙招

平平无奇爱好科技

京东商家智能助手:Multi-Agents 在电商垂域的探索与创新

京东零售技术

人工智能 agent LLM 企业号 5 月 PK 榜

湖南省气象信息中心:部署运行省人工智能气象应用支撑平台

ModelWhale

大数据 气象

MES系统适用于哪些行业?MES系统具体功能有哪些?

万界星空科技

工业互联网 制造业 生产管理系统 mes 万界星空科技

丰富企业 AI 存储选择丨焱融科技与安擎完成兼容性互认证

焱融科技

焱融科技 高性能存储 存力 AI存储 安擎

和鲸科技联合中软国际教育,发布 AI 数智科研联合解决方案

ModelWhale

人工智能 科学数据

欧特克工程建设峰会在京召开

E科讯

柔性算力随心配,企业一键上云更智能

平平无奇爱好科技

OPPO举办OTalk 开发者交流专场,提供Android 15多元化适配服务

科技热闻

MYSQL造数据占用临时表空间

不在线第一只蜗牛

MySQL 数据库

软件测试学习笔记丨App性能测试方案-霍格沃兹

测试人

软件测试 性能测试 测试开发

鸿蒙OS NEXT的推出不仅仅面向App端

Geek_2305a8

Koupleless 单进程多应用如何解决兼容问题

SOFAStack

开源 应用架构 蚂蚁集团 兼容

继Bakkt之后的又一全新力作,ICE推出AI高频交易平台

科技热闻

全新品牌升级的 Pencils Protocl,构建 LRT 赛道新范式

大瞿科技

继Bakkt之后的又一全新力作,ICE推出AI高频交易平台

科技汇

6倍性能一直加速一直快,云耀X实例值得中小企业拥有

轶天下事

渣打国际商业银行与环旭电子完成签署3.2亿美元可持续金融绩效连结贷款

财见

Entity Framework 6.3 和EF Core 3.0路线图 _语言 & 开发_Jonathan Allen_InfoQ精选文章