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-11-06 18:16:16

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

EntityFramework 6.x和EntityFramework Core必须需要MultipleActiveResultSets?

前言 本节我们来探讨到底需不需要在连接字符串上加上MultipleActiveResultSets = true ?,若您有更深层次的理解欢迎留下您的脚印. EntityFramework 6.x和EntityFramework Core需要MultipleActiveResultSets? 很多童鞋遇到如下图中错误就立马想到在连接字符串上加上 MultipleActiveResultSets = true ,但是这样真的是最终解决方案么? 下面我们来看一段在EntityFramework 6.

理解预发布环境和项目部署流程

题外话: 终于又提笔了.一直都记得博客园,偶尔看到评论,偶尔也会翻看旧的文章.一直没有写是因为这段时间里有些忙碌,学习测试方法分析,自动化编程,发布流程环境管理,测试提效,学习和积累是一个漫长的过程,以及暂时没有找到可以单独成文写出来的内容. 这次文章讲到的内容,是如何从一个测试角度看待发布流程和环境管理这些在功能测试前应该先了解的基础. 一.环境 开发环境: 通常表示最低环境,由代码开发人员直接使用和维护,是代码最超前版本的一个环境. 测试环境: 开发人员确认代码分支在开发环境自测没有问题后,

EntityFramework Core技术线路(EF7已经更名为EF Core,并于2016年6月底发布)

官方文档英文地址:https://github.com/aspnet/EntityFramework/wiki/Roadmap 历经延期和更名,新版本的实体框架终于要和大家见面了,虽然还有点害羞.请大家多体谅! 下面正式进入主题: Entity Framework Core (EF Core) 下面是EF Core 的计划和技术线路,注意,这些计划是可能发现变化的,因为很多事是很难预测的.即便如此,我们还是尽可能保持计划的公开和透明,以解大家对EF Core期望,以及做出相应的安排. Sched

[转]EntityFramework Core技术线路(EF7已经更名为EF Core,并于2016年6月底发布)

本文转自:http://www.cnblogs.com/VolcanoCloud/p/5572408.html 官方文档英文地址:https://github.com/aspnet/EntityFramework/wiki/Roadmap 历经延期和更名,新版本的实体框架终于要和大家见面了,虽然还有点害羞.请大家多体谅! 下面正式进入主题: Entity Framework Core (EF Core) 下面是EF Core 的计划和技术线路,注意,这些计划是可能发现变化的,因为很多事是很难预测

EntityFramework 6.x和EntityFramework Core关系映射中导航属性必须是public?

前言 不知我们是否思考过一个问题,在关系映射中对于导航属性的访问修饰符是否一定必须为public呢?如果从未想过这个问题,那么我们接下来来探讨这个问题. EF 6.x和EF Core 何种情况下必须配置映射关系? 在EF 6.x中我们创建如下示例类. public partial class Customer { public int Id { get; set; } public string Name { get; set; } public string Email { get; set;

EntityFramework监控sql和EntityFramework中的事务

继续上篇:EntityFramework和EntityFramework.Extended使用说明——性能,语法和产生的sql 1.监控sql 上篇中的sql监控采用的是 Microsoft SQL Server Management Studio中工具->profiler去监控的.当然,Express版本是没有此功能的.如果您使用不了profiler或者觉得不方便,那么,给出监控sql的第二方案. 找到的资料是英文的,还好,容易理解.原文链接:https://blog.oneunicorn.c

【第十周】final预发布视频

final版本发布视频组名: 新蜂组长: 武志远组员: 宫成荣 谢孝淼 杨柳 李峤项目名称:java俄罗斯方块NEO平台:优酷地址:http://v.youku.com/v_show/id_XMTg0MzMyNzg5Mg==.html bilibili视频试玩:纳尼!室友打败俄罗斯方块职业玩家?! http://www.bilibili.com/video/av7326970/

mysql-MHA预发布环境架构分享(一)之架构草图、正式图展示

   [草图] 简介: MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于 Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件.在MySQL故障切换过程中,MHA能做到在 0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用. 该软件由两部分组成:MHA M

mysql-MHA预发布环境架构分享(二)之mysql源码安装

安装mysql源码包: (1).安装cmake (mysql5.5以后是通过cmake来编译的) 下载解压cmake-2.8.5.tar.gz tar zxf cmake-2.8.12.2.tar.gz -C /usr/local/src cd /usr/local/src/cmake-2.8.12.2 ./configure --prefix=/usr/local/cmake make && make install export PATH=/usr/local/cmake/bin:$P