【AICon】探索RAG 技术在实际应用中遇到的挑战及应对策略!AICon精华内容已上线73%>>> 了解详情
写点什么

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:547844
用户头像

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

关注

评论

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

SpringCloud Alibaba微服务实战一基础环境准备

AI乔治

Java 架构 微服务 Spring Cloud

朋友不讲武德急催我给他Java干货教程,我劝他耗子尾汁并丢给他一份GitHub上标星115k+的Java教程,他看了之后连忙向我道歉!

Java架构之路

Java 程序员 架构 面试 编程语言

OpenKruise:阿里巴巴 双11 全链路应用的云原生部署基座

阿里巴巴云原生

Kubernetes 运维 云原生 中间件 存储

软件测试流程

测试人生路

软件测试

利用区块链数字化人民币,中国有望从追随者变为新秩序的领导者

CECBC

区块链 数字人民币

一文带你读懂!华为云在ACMUG技术沙龙上都透露了些啥?

华为云开发者联盟

数据库 大数据 数据

大整数算法

落曦

重点人员管控系统开发,情报研判系统搭建

t13823115967

重点人员管控系统开发 情报研判系统搭建

阿里P8熬夜完成这两份800页Java面试核心知识原理+框架

Java~~~

Java 程序员 面试 编程语言 架构师

年轻人不讲武德!Security五套「源码级」笔记哪里来的?

小Q

学习 编程 面试 spring security SpringCloud

今年最火的 Golang 云原生开源项目,可能就是它了!

阿里巴巴云原生

开源 Kubernetes 云原生 Go 语言

奉劝各位准备面试的Java程序员耗子尾汁赶紧扔掉网上那些千篇一律的面试题,这份《写给大忙人看的Java核心技术》能够让你快速复习

Java架构之路

Java 程序员 架构 面试 编程语言

年轻人你不讲武德,自己偷着学习!spring Security五套「源码级」笔记哪里来的?我也要!

Java架构追梦

Java 源码 架构 面试 spring security

anyRTC uni-app 跨平台SDK 发布!总有一款适合你!

anyRTC开发者

uni-app 音视频 WebRTC RTC

2020年10月公有云性能评测:盛大云-华东蝉联冠军,腾讯云-北京无缘前三

博睿数据

云计算 腾讯云 ucloud 公有云 评测

想了解物联网应用的自动部署,看这篇就够了

华为云开发者联盟

服务器 华为云 部署

数据库:我没有带闪,不讲武德

比伯

Java 编程 程序员 面试 计算机

对于CRM之于现代化企业的影响以及作用的分析

Learun

敏捷开发 CRM 客户关系管理

SpringCloud Alibaba微服务实战三 - 服务调用

AI乔治

Java 架构 微服务 Spring Cloud

SpringCloud Alibaba微服务实战四 - 版本管理

AI乔治

Java 架构 微服务 Spring Cloud

区块链司法可信存证,版权维护应用落地

t13823115967

区块链司法可信存证 版权维护应用落地

聊聊在国企当程序员的这三年,这样的生活真的是你想要的吗?

Java架构师迁哥

基于ELK的日志平台介绍

Rayzh

ELK 日志系统

架构师训练营第 1 期 -week9

习习

区块链能修复企业云计算吗?

CECBC

区块链 云计算

区块链的常识之,什么是区块链股份授权证明机制DPoS?

CECBC

区块链 共识机制

字节跳动的这份《算法中文手册》火了,完整版PDF开放下载!不少小伙伴靠这份指南成功掌握了算法的核心技能,成功拿到了 BATJ等大厂offer。

Java架构之路

Java 程序员 架构 面试 编程语言

linux开发各种I/O操作简析,以及select、poll、epoll机制的对比

良知犹存

linux开发

面试官都爱问的ThreadLocal

执墨

ThreadLocal 哈希表 弱引用

第11代酷睿处理器出色体验的奥秘原来是这个!

E科讯

SpringCloud Alibaba微服务实战二 - 服务注册

AI乔治

Java 架构 微服务 Spring Cloud

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