EntityFramework 7 更名为EntityFramework Core(预发布状态)-阿里云开发者社区

开发者社区> jeffcky> 正文

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

简介: 前言 最近很少去学习和探索新的东西,尤其是之前一直比较关注的EF领域,本身不太懒,但是苦于环境比较影响自身的心情,所以迟迟没有下笔,但是不去学习感觉在精神层面缺少点什么,同时也有园友说EF又更新了,要我再写一篇,最终经过思想斗争后,还是花了一点时间去继续探索。
+关注继续查看

前言

最近很少去学习和探索新的东西,尤其是之前一直比较关注的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性能的吐槽会少一点吧,让我们拭目以待。

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
飞天加速计划·高校学生在家实践 ECS使用体验
飞天加速计划·高校学生在家实践 ECS使用体验
14 0
推荐 2 款非常好用的应用 App
使用 Django 进行 Web 开发的时候,为了提高开发效率,少不了安装一些第三方应用 App
7 0
初次尝试ecs部署spring boot个人小项目
本学期在学习课程中需要实现高级编程语言设计一个app或者web管理系统,我选择用spring boot写了一个博客管理系统,初次尝试了在aliyun部署项目
11 0
修改Visual Studio Code的自定义键盘快捷键
修改Visual Studio Code的自定义键盘快捷键
7 0
ECS使用体验
牛顿曾有句名言:“我之所以比别人看得更远,是因为站在巨人的肩膀上。
11 0
修改Visual Studio Code的自定义键盘快捷键
修改Visual Studio Code的自定义键盘快捷键
7 0
非常有意思的几个库
非常有意思的几个库
8 0
飞天加速计划·阿里云ECS服务器使用感悟
本人是国内某专业2021级信息安全系新生,在学习linux的过程通常使用的是在虚拟机中搭建linux环境来进行学习,在日常使用过程。。。
6 0
过去两周阿里云ECS服务器使用体验
这篇文章讲述了我当初如何了解到阿里云ECS服务器以及为什么使用阿里云ECS服务器,还有对“飞天加速计划·高校学生在家实践”活动未来的展望。
6 0
《海量数据处理与大数据技术实战》来咯,从实战出发,解读大数据技术!
随着大数据技术和云计算技术的发展,Hadoop 大数据生态系统中的各项技术越来越流 行,已然成为大数据开发领域的事实标准。特别是 Hadoop 大数据生态系统中各项技术的开 源特性,使得其核心技术和各种解决方案得到了广泛的应用。程序员要想进入大数据开发领 域,除了需要有扎实的编程基础外,还要融会贯通各种大数据框架,最好还要熟悉大数据领 域中有典型意义和实用价值的各类开发案例。这样才能在竞争日益激烈的大数据市场环境中 具备较强的职场竞争力。
8 0
+关注
jeffcky
耕耘博客、走进技术的世界!
173
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载