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

前言

最近很少去学习和探索新的东西,尤其是之前一直比较关注的EF领域,本身不太懒,但是苦于环境比较影响自身的心情,所以迟迟没有下笔,但是不去学习感觉在精神层面缺少点什么,同时也有园友说EF又更新了,要我再写一篇,最终经过思想斗争后,还是花了一点时间去继续探索。本篇比较理论的去分享最近EF进展,后面有时间会继续关注EF团队在EF上的动向,并给出相对应的实例。

EF Core 1.0.0

(1)EntityFramework是微软在.NET中推荐使用的数据访问技术,而EntityFramework Core提供了和EF6.x相似的开发者体验,它也支持LINQ、POCO以及Code First,它也能访问关系和非关系存储的数据,但是EF Core比之前的EF版本更加轻量。与此同时,在一开始被构建时就被应用的非常好比如在使用ASP.NET vNext上使用的设备如:Windows应用程序,当然在传统的.NET领域也是如此。

————————————————————————————————————————————————————————————————

(2)但是我们需要注意的是EF Core在严格意义上并未完全和ASP.NET Core捆绑在一起,并且EF Core有许多特性是在ASP.NET使用范畴之外。它是ASP.NET Core整体的一部分,因此作为ASP.NET Core的部分去发布一个稳定的EF Core版本去支持ASP.NET Core确实非常重要。

————————————————————————————————————————————————————————————————

(3)因为EF Core是一个新的代码库,所以在过去EF版本中实现的特性并不一定会在EF Core中实现,所以鉴于此,EF团队给出了在EF Core发布之前需要实现的如下的列表,同时也列出了EF团队认为非常重要且需要实现的特性,但是,但是,在初始发布EF Core时将并不会启用。所以这也就意味着:当前在大多数应用程序中使用EF 6.x版本仍然是最佳选择,直到这些特性在EF Core代码库中得到实现。

已实现(Implemented)

如下特性已经实现并且已经包含在官方最后一次正式发布之前。注意:【如下列出的特性可能存在Bugs可能需要EF团队时间去解决并且这些APIs在第一次正式发布之前仍然可能会有所改变。】

模型(Modeling)

(1)基础模型(Basic modeling):基于带get/get属性的POCO实体。公共属性来自于基础类库如(string、int等)。

(2)关系(Relationship):有导航属性和外键属性的实体。

(3)隐藏状态属性(Shadow state properties):此属性只是作为模型的一部分,也就是说在CLR类中没有与之对应的属性。

(4)唯一性约束和索引(Unique constraints an indexes):定于目标的唯一性约束是否是主键的关系。

(5)内置约定(Built-in conventions):构建实体类的初始化模型。

(6)模型验证(Model validations):检测模型中无效的模式,并提供有帮助的错误信息。

(7)键值的产生:包括后台以及数据库中生成的。

(8)关系(Relationnal):允许实体被映射到表中的列。

变更追踪(Change Tracking)

(1)快照式变更追踪(Snapshot change tracking):当与数据库中进行交互时记录实体的原始值。

(2)访问跟踪状态(Access tracked state):通过DbContext.Entry和DbContext.ChangeTracker访问实体的状态。

(3)附加分离的实体图/(Attach detached entities/graphs):为了保存新的实体或者修改的实体,通过DbContext.AttachGraph的APIs将实体附加到上下文中。

保存(SaveChanges)

(1)基本的保存功能(Basic save functionality):将改变的实体与数据库处于同步状态。

(2)乐观并发(Optimistic Concurrency):防止当从数据库中获取数据时,数据被其他用户所覆盖。

(3)异步保存(Async SaveChanges):当调用SaveChanges时数据库需要作出相应的操作,此时释放当前线程,来处理SaveChanges发出的命令。

(4)事务(Transactions):当SaveChanges时是原子性即要么提交全部成功或者对数据库数据没有作出任何改变,对于transactions有相关的APIs来使得在同一个上下文实例中共享transactions。

(5)批处理语句(Batching statements):通过批处理多个INSERT/UPDATE/DELETE命令到单一的往返到数据库提供更好的性能。

查询(Query)

(1)支持基础LINQ(Basic LINQ Support):提供LINQ处理来自数据库的数据。

(2)混合的客户端或者服务器端评估(Mixed client/server evaluation):让查询包含不会在数据库中进行任何评估的逻辑,与此同时,从数据库中返回到内存的数据必须被评估。

(3)不会追踪(No Tracking):当上下文不需要监控实体实例的改变时(也就是说当我们只是读取数据时),此时将启用快速查询。

(4)饥饿加载(Eager loading):当查询关联的数据时通过使用Include和ThenInclude方法来标识这些相关联的数据需要被加载。

(5)异步查询(Async Query):当数据库处理查询时释放当前线程来处理其他请求。

(6)常见的BCL翻译功能(Translation of common BCL functions):当使用LINQ时,启动这些功能语句将会被翻译成特定的数据库查询语言。

(7)原始SQL查询(Raw SQL Query):提供Dbset.FormSql来使用原始SQL查询来获取数据。当然这些查询也可以用LINQ组成。

数据库架构管理(Database schema management)

(1)创建和删除数据库的APIs(Database creation/deletion)APIs:主要是为了在没有使用数据迁移的前提下快速创建和删除数据库。

(2)数据库错误页(Database error page):是对于ASP.NET 5的一个中间件,为了提供与数据库有关异常的帮助。

(3)有关数据库迁移(Relational database migrations):允许数据库架构随着模型的变化而变化。

提供的数据库(Database providers)

(1)EntityFramework.SqlServer:连接Microsoft SQL Server 2008以上的数据库。

(2)EntityFramewrok.Sqlite:连接一个SQL Lite 3数据库。

(3)EntityFramework.InMemory: 并没有连接到一个真正的数据库主要是被用来测试。

平台(Plateforms)

(1)所有.NET(Full .NET):包括控制台、WPF、WinForm、ASP.NET 4等等。

(2)ASP.NET 5:包括所有.NET和.NET Core。

(3)所有Windows平台(UWP):应用程序可以利用SQLite来访问本地数据。

进行中(In Progress)

以下特性正在实现中,在某些场景下可能有效,可能还不太完整使用起来仍有一些限制。

模型(Modeling) 

(1)数据注入(Data Annotaions):添加特性到实体类或者属性以此来影响到实体。

(2)TPH继承模式(TPH inheritance pattern):通过数据库中给定的记录中的辨别字段来识别在继承上的实体类型并保存到一个单表中。

跨领域性质(Cross-cutting quality)

(1)文档(Documentation):将发展有关EF Core的文档【链接:EntityFramework.Docs

(2)智能提示文档(IntelliSense documentation):当在Visual Studio中使用EF APIs时会得到智能提示。

(3)以往APIs(APIs review):由于涉及到以前的EF APIs,所以将会给出一份干净而且一致的APIs。

性能(Performance)

(1)附加覆盖(Additional converage):通过测试组件可能会有额外的覆盖。

(2)性能改善(Performance improvements):性能瓶颈正在进行中。

查询(Query)

导航属性翻译(Navagation property translation):允许通过LINQ直接点出导航属性的字段,如(Products.Where(p=>p.Category.name=="cnblogs"))。

逆向工程(Reverse engineer)

允许从现有的关系数据库架构逆向得到EF模型。

平台(Plateforms)

EF Core当前可以在苹果和Linux上工作,但是正在向更稳定的方向上提高。

EF Core 1.0.0日程表

在1.0.0发布之前以下已经得到实现,但是现在还未正式启用。

(1)允许(如迁移)工具找到上下文类型并实例化来创建模型和识别连接其连接的数据库。

(2)为一般应用部署时,部署数据库发生的改变提供更好的支持。

(3)提供当父亲删除时其孩子也应该删除的级联删除。

(4)在ASP.NET 5中初始化版本日志记录比较简单,为了后续记录的更新提供更友好的日志记录。

未实现特性(Backlog Features)

EF Core将是EF团队推荐使用的EF版本,但是有一个前提,那就是还需实现如下特性EF Core才是许多应用程序的最佳选择,特别是在例如UWP平台上EF 6.x无法工作,当然了对于绝大数应用程序来说,缺少以下特性也同样使得EF 6.x是个不错的选择。

查询(Query) 

(1)显示加载(Explicit loading)。

(2)子查询(Sub queries)。

(3)将Group by转换为SQL(Group by translation SQL)。

日志(Logging)

(1)良好的日志记录。

(2)结构化日志记录。

模型(Modeling)

复杂/值类型(Complex/value Type)。

更新模型(Update model)

从数据库中更新数据模型。

变更追踪(Change Tracking)

(1)补充在EF6.x中缺少的APIs(如:Reload【重新加载】、GetModifiedProperties【获取修改的属性】等等)。

(2)对于关系的Entry方法。

(3)对于数据库值的Entry方法。 

特定关系(Relational specific) 

(1)基于存储过程的CUD。

(2)弹性连接。

高优先级特性(High priority features)

尽管在上述对于未实现特性已经列出了一个清单,但是对于绝大多数应用程序来说,因为没有这些高优先级特性,正因如此使得EF Core将是一个比较令人拍手叫好的发布版本。 

模型(Modeling) 

(1)隐藏状态实体(Shadow state entities)。

(2)映射到方法、可能的属性模式、不可变对象等等。

(3)可视化模型(Visualize model)。

(4)支持可组合的功能(Composable functions support)。

(5)自定义约定(Custom conventions)

(6)实体或者表拆分(Entity/Table splitting)。

(7)简单类型转换(比如从string->xml)。

(8)没有添加实体的多对多关系(many:many relationships without join entity)。

变更追踪(Change Tracking)

通知变更追踪(Notification change tracking)。

增删改查(CRUD)

(1)基本数据保存(Seed data)。

(2)延迟加载(Lazy loading)【根据反馈来看】。

(3)简单的ETag式并发令牌支持(Simple ETag-style concurrency token support)。

(4)饥饿加载改善(Eager loading)【比如:汇总、过滤、派生类等等】。

(5)用于查询和更新的简单拦截机制(Simple interception mechanisms for query and updates)。

提供者(Providers)

(1)ATS。

(2)Redis。

(3)其他非关系数据库。

迁移(Migrations)

基于公共语言架构的非DNX项目。

指定提供者(Provider specific)

通过配置文件指定提供者。

结语 

EF Core原名为EntityFramework 7,至于更名大概主要有两点,一是为了更好的跨平台,二是为了提高EF的性能。从而给开发者更好的使用体验以及让更多的.NET开发者去使用EF Core,上述也已经讲到,EF Core会更加轻量同时也会更多的去关注它的性能瓶颈,至此或许关于EF性能的吐槽会少一点吧,让我们拭目以待。

 

时间: 2024-09-12 14:54:14

EntityFramework 7 更名为EntityFramework Core(预发布状态)的相关文章

WP8.1 Blue预发布版本照片曝光

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;   早在今年6月,有关早期Windows Phone 8.1 "Blue"构建版的截图就已经出现在了网络上.其揭示了一个非常早期版本的通知中心和其它新功能.今天,另一张有关Windows Phone 8.1 "Blue"预发布版本的照片,已经在XDA开发者论坛被曝出--新系统运行于一台诺基亚Lumia 620手机上. 如下所示

Fab最近上线了一个预发布的产品页面

摘要: Fab最近上线了一个预发布的产品页面,是关于其即将上线的新家居用品品牌Hem.根据Hem官网的介绍,Hem是由Fab收购的电商网站Massivkonzept以及One Nordic和Fab一起整合而成的设计型电商网站 Fab最近上线了一个预发布的产品页面,是关于其即将上线的新家居用品品牌Hem.根据Hem官网的介绍,Hem是由Fab收购的电商网站Massivkonzept以及One Nordic和Fab一起整合而成的设计型电商网站,目前正在邀请VIP内测用户,正式发布时间会在十月中旬.

测试、预发布后用python检测网页是否有日常链接_python

在大的互联网公司干技术的基本都会碰到测试.预发布.线上这种多套环境的,来实现测试和线上正式环境的隔离,这种情况下,就难免会碰到秀逗了把测试的链接发布到线上的情况,一般这种都是通过一些测试的检查工具来检查链接来规避风险的.前两天跟了一个问题也是这个情况,开发疏忽把日常url发布到线上了.但是测试那边没有自动化的监控工具,导致没有及时发现,由于最近正好在看python,后来处理完回家就想用python做个简单的监控. 大略思路是:用python写一个脚本来分析网页里的所有url,看是否包含日常的链接

助力合作伙伴引领“互联网+”变革 浪潮预发布高端存储

   2015年4月24日,浪潮在2015合作伙伴大会的存储分论坛上,向数百位参会嘉宾预发布了业界首款面向"互联网+"关键业务数据的高端存储系统,携手合作伙伴为客户应对"互联网+"与传统行业融合所带来的IT敏捷性.高可用和智能化管理的挑战,打造"互联网+"关键业务的核心数据平台. 近年来,浪潮渠道增长迅猛,渠道规模已达到6800家,全国方案百强有80家与浪潮展开业务合作.其中,IBM某全国总代以及750家IBM金牌.银牌和CFT渠道已经与浪潮建立

预发布环境,Tag发布机制和可重复的部署过程

导读:作者吕毅在blog.lvscar.info发表了本篇文章,文中分享了Joel Test .预发布环境.Tag发布机制以及可重复的部署过程等.内容如下: 周末聚会,无意间聊起建筑行业.自己是搞软件开发的,我们的行业从建筑设计/施工过程中借鉴了大量的概念,隐喻,名词.可以说软件就是现实中伴随整个人类历史发展的"建筑"在虚拟空间中的投影.有个两年前问过其他朋友的问题,这次友人又再次提起,"为什么建筑设计过程中没有普遍性的采用版本控制呢?"瞎扯了一干各种原因后,我们几

谷歌眼镜目前还是预发布版产品,对比很多消费电子设备还相对粗糙

7月6日消息,据国外媒体报道,谷歌眼镜目前还是预发布版产品,对比很多消费电子设备还相对粗糙.不过其最新固件更新显示,它将增加多个实用功能,包括名为"Boutique"的应用商店.锁定功能和音乐播放器等. 谷歌之前就提过锁定功能,用它来保护用户数据隐私,因此它的推出并不意外.有了该项功能,用户可在不使用谷歌眼镜时,通过滑动手势代码组合来锁住屏幕.Glass Boutique则是有利于应用发现的应用商店,让用户可以直接在上面寻找各类应用.它将既提供现已推出的基于Mirror API开发的应

通过 C# 使用 J# 类库中的 Zip 类压缩文件和数据

数据|压缩 本文假设您熟悉 C# 和 Windows 窗体 下载本文的代码: ZipCompression.exe (150KB) 摘要 在存储文件或者通过网络发送文件时,使用 Zip 压缩可以节省空间和网络带宽.此外,还不会丢失经过 Zip 的文件夹的目录结构,这使其成为非常有用的压缩方案.C# 语言不具有任何使您可以操纵 Zip 文件的类,但是由于面向 .NET 的语言可以共享类实现,并且 J# 在 java.util.zip 命名空间中公开了类,因此您可以在 C# 代码中使用这些类.本文将

在Eclipse中构建DocBook XML

入门 本文将演示如何结合使用 DocBook XML 和 Eclipse 集成开发环境 (IDE),创建以多种格式轻松分发的可重用技术文档.DocBook XML 是标准 XML 标记库,使用它可以编写用于生成几乎所有输出的样式表.但是,由于 DocBook 已经存在近 10 年,因此已经编写了许多样式表来生成许多类型的文档,包括 HTML.文本.PDF 和手册. 读完本文后,您应当能够使用 DocBook XML 创建可生成为 HTML 格式的文档,并可用于 Eclipse 帮助插件及来自单个

EntityFramework 6.x多个上下文迁移实现分布式事务

前言 自从项目上了.NET Core平台用上了EntityFramework Core就再没碰过EntityFramework 6.x版本,目前而言EntityFramework 6.x是用的最多,无论是找工作而言还是提升自身技术而言皆自身收益,同时呢,大多数时间除了工作之外,还留有一小部分时间在写EntityFramework 6.x和EntityFramework Core的书籍,所以将EntityFramework 6.x相当于是从零学起,EntityFramework 6.x又添加了许多