EntityFramework Core技术线路(EF7已经更名为EF Core,并于2016年6月底发布)
官方文档英文地址:https://github.com/aspnet/EntityFramework/wiki/Roadmap
历经延期和更名,新版本的实体框架终于要和大家见面了,虽然还有点害羞。请大家多体谅! 下面正式进入主题:
Entity Framework Core (EF Core)
下面是EF Core 的计划和技术线路,注意,这些计划是可能发现变化的,因为很多事是很难预测的。即便如此,我们还是尽可能保持计划的公开和透明,以解大家对EF Core期望,以及做出相应的安排。
Schedule(时间表)
发布初始版本的时间,我们计划是与ASP.NET Core 保持一致(ASP.NET Core 的发布时间请参考这里)(译注:方便大家查看,已把大家最关心的部分放在下面,最后一行就是EF Core 的发布时间 2016 年6年底)
EF Core 与ASP.NET Core 不存在严密的挂钩(因为EF Core 在ASP.NET之外还有很多运用场景),但它是ASP.NET Core不可或缺的一部分,因此在发布ASP.NET Core时,我们必须提供一个稳定的EF Core 版本,这很重要!
Features(特性)
因为EF Core 是一个新的代码库(译注:完全重写),因此,之前版已有的一些特性在EF Core中,不一定提供。基于此,我们列出了第一个版本已经实现和计划实现的特性。
我们也列出了我们认为很重要的特性,但EF Core 初始版本并没实现 。也就是说,在这些特性没有在EF Core中实现时,EF6.x对于很多应用仍然是最好的选择。
Core 1.0.0 Features
Implemented(已实现)
下面列出的特性EF Core已经实现,并已经包含是官方的pre-release(预览版)。注意下面的特性也许还存在bug,提供的API也有可能会在正式版本中发生变化 ,因为我们还在为第一个稳定的版本而努力。
- Modelling(建模)
Basic modelling(基本建模) 基于POCO实体的get/set属性,支持来至BCL(基础类库)的基础类型(比如int, string 等);
Built-in conventions (内建约定) 基于实体类构造一个初始模型;
Fluent API (流式API) 允许你在上下中重写方法OnMedelCreating,以后进一步配置基于约定构建的模型;
Data annotations(数据注解) 添加到实体类,属性头上的Attributes,它会影响EF模型(比如:添加[Required],它将让EF知道一个属性是必须提供的);
TPH inheritance pattern(TPH 继承模式) 允许一个继承层次的类保存到数据的一个表中,通过数据库记录中的一个鉴别列来标识实体类型;
Relationships(关系) 依赖于导航属性和外键属性的实体;
Shadow state properties (影子属性) 没有相应的CLR类,但它是模型的一部分的属性;
Alternate keys(替换键) 可以把关系指向一个替换键(译注:不是主键,但要保证唯一的列);
Model validation (模型验证) 它能阻止模型中无效的模式并提供错误信息;
Key value generation (键值生成) 包含用户自己生成和数据库生成两种模式;
Relational: Table mapping(关系:表映射) 允许实体被映射到表或是列;
- Change Tracking(变更跟踪)
Snapshot change tracking(跟踪快照) 基于从数据库中获取的实体的原始值 ;
Notification change tracking(通知跟踪变更)允许你的实体在属性值发生变更时通知变更跟踪器;
Accessing tracked state(访问跟踪状态) 访问实体的状态(通过via DbContext.Entry
和 DbContext.ChangeTracker
);
Attaching detached entities/graphs 提供新的API DbContext.AttachGraph帮助你附加实例到上下文中,以便保存新创建或是变更后的实体;
- SaveChanges(保存)
Basic save functionality(基本的保存功能) 允许持久化一个实体的实例到数据库中;
Optimistic Concurrency(乐观并发) 当另一个用户从数据库中获取数据后,如果你试图对该数据进行更改并提交,这将被阻止;
Async SaveChanges (异步保存) 当数据库处理请求时,释放当前线程以处理别的请求;
Transactions(事务) 意味着,SaveChanges总是一个原子操作(要么全部成功,要么对数据加做任何修改(回滚)),同时提供API,让两个不同的上下文实例共享事务;
Relational: Batching of statements(关系数据库:批量语句) 通过在一次数据库请求中批量处理 INSERT/UPDATE/DELETE,来提供更好的性能;
- Query(查询)
Basic LINQ support (支持LINQ) 提供使用LINQ获取数据的能力;
Mixed client/server evaluation 查询可以包含不能在数据库中求值的逻辑,它们必须在内存中进行求值;
NoTracking 当你不需要对变化进行监视时(比如,获取的数据用于只读的场景),你可以关闭跟踪,以便更快的执行查询;
Eager Loading(预先加载) 提供方法Include
和 ThenInclude来标识相关联的数据在查询时,一起被获取;
Async Query (异步查询) 当数据库处理请求时,释放当前线程以处理别的请求;
Raw SQL queries(SQL 语句查询) 提供方法DbSet.FromSql,使用SQL命令语句来查询数据,这些查询同样也能使用LINQ来实现 ;
- Database schema management(数据库架构管理)
Database creation/deletion APIs 在不想使用migrations时,快速创建、删除数据库,用于测试;
Relational database migrations 当模型发生变化时,允许关系弄数据库更新构架(schema);
Reverse engineer from database 基于一个存在的数据库生成模型;
- Database Providers
EntityFramework.SqlServer 连接Microsoft SQL Server 2008及其以上的版本;
EntityFramework.Sqlite 连接到SQLite3数据加;
EntityFramework.InMemory 用于测试,连接时,不用连接到一个真正的数据库;
Postgres 支持使用Npgsql开发;
SQL Compact 支持使用 ErikEJ开发;
- Platforms
Full .NET 包含 Console, WPF,WinForms,ASP.NET4等;
.NET Core(包含 ASP.NET Core) 目标是支持 Windwos,OSX,和Linux上运行的Full.NET 和.NET Core;
Universal Windows Platform(UWP) 可以使用SQLite提供服务访问本地数据库;
In Progress(开发中)
为发布1.0.0,我们正聚焦于下面的工作:
- Bug fixing(Bug修复)改进整体的代码质量和系统的可靠性;
- LINQ Provider Improvements(LINQ Provider改进) 增加LINQ成功查询的数量,提高LINQ翻译成SQL并在数据库中执行的效率;
- Performance improvemetns(性能改进) 解决性能瓶颈;
- Documentaton(文档) 正在整理相关的文档库;
- IntelliSense documentation(智能感知文档) 使用Visula Studio开发应用是为你提供EF Core的上下文帮助(译注:智能感知提示);
Backlog Features(待开发特性)
这不是一个详尽的列表,但列出来一些重要的且当前版本的EF Core还未实现的特性。
Critical O/RM Features(关键的O/RM 特性)
下面列出这些特性实现后,我们将把EF Core作为EF中的推荐版本,特别是在EF6.x不能使用的地方(比如,UWP和.NET Core),但在没有实现前,很多应用的首选仍然是EF6.x;
- Query(查询)
Improved translation 能执行大量的查询,让更多的逻辑在数据进行求值,而不是在内存中;
GroupBy translation 把LINQ GroupBy操作符分组的逻辑放到数据库去执行,而不是在内存中;
Lazy loading 当访问导航属性时,自动从数据库获取数据;
Explicit Loading 允许你提前加载实体的一个大数据量的导航属性;
Raw SQL querys for non-Model types 允许你使用一个原生的SQL命令去填充一个非模型类型的对象(通常是非规范化的 view-model);
- Database schema management(数据库架构管理)
Visual Studio Wizard for reverse engineer 当你从数据库生成模型(译注:这里的模型是指code -first 模型)时,允许你可视化地配置连接、选择表、等等。
Update model from database 当数据库架构发生变更时,允许你更新之前从数据库生成的模型;
- Modelling(建模)
Complex/value type(复杂类型/值类型) 表示实体的一个属性集,没有主键;
- Change Tracking (变更跟踪)
Missing EntityEntry APIs from EF6.x(EF6.x中缺少的的EntityEntry APIs) 比如 Reload
, GetModifiedProperties
,GetDatabaseValues
等等;
- Relational specific(特殊关系)
Stroed procedure maping(存储过程映射) 允许EF使用存储过程向数据库持久化更变(FromSql 方法已经提供了很好的支持);
View mapping(视图映射) 允许EF 映射数据库视图;
Connection resiliency (弹性连接) 自动重试在数据库中执行失败的命令,当你连接到SQL Azure时非常有用,在这种情况(连接到SQL Azure)失败是正常的。
High priority features(高优先级特性)
在我们的待开发特性中,下面列出的这些特性具有较高的优先级,当然这也不可能是一个确切的列表。虽然他们还未实现,但这并不影响EF Core 成为令人激动的版本。
- Modeling(建模)
More flexible property mapping ( 更灵活的属性映射) 例如 构造函数参数,Get/Set方法,property bags 等;
Visualizing a model 可视化一个基于Code-first模型的关系图;
Simple type conversions(简单类型转换) 比如:string =>xml;
Spatial data types(空间数据类型)例如:SQL Server's 中的geography
和geometry;
Many-to-many relationships(多对多关系)在没有 join entity的情况下进行建模。你现在已经能使用一个join entity进行多对多有关系建模了;
Alternate inheritance mapping patterns(可选的继承映射模式) 对于关系型数据库,比如TPT,TPC;
- CRUD
Seed data 允许一组数据很容易被插入(upserted);
Etag-style concurrency token support;
Eager loading rules 允许实体被查询时,与之关联的默认数据集总是被获取;
Filtered loading 允许你加载实体对象的一个子集;
Simple command interception 提供一种简单的方式,在命令发送到数据库前或后,对基进行读或写;
- Proviers
Azure Table Storage
Redis
Other non-relational databases(其它非关系弄数据库)
EntityFramework Core技术线路(EF7已经更名为EF Core,并于2016年6月底发布)的更多相关文章
- [转]EntityFramework Core技术线路(EF7已经更名为EF Core,并于2016年6月底发布)
本文转自:http://www.cnblogs.com/VolcanoCloud/p/5572408.html 官方文档英文地址:https://github.com/aspnet/EntityFra ...
- 使用Asp.Net Core MVC 开发项目实践[第二篇:EF Core]
在项目中使用EF Core还是比较容易的,在这里我们使用的版本是EF Core 2.2. 1.使用nuget获取EF Core包 这个示例项目使用的是SQLSERVER,所以还需要下载Microsof ...
- 在.net core程序中使用EntityFrameok(非EF Core)
最近用NoSQL较多写,用传统的EF到不多,但在一些.net core小程序中也小试牛刀过,不过当时用的是微软为.net core量身定制的Entity Framework Core,只是一些比较常规 ...
- 【asp.net core 系列】8 实战之 利用 EF Core 完成数据操作层的实现
0. 前言 通过前两篇,我们创建了一个项目,并规定了一个基本的数据层访问接口.这一篇,我们将以EF Core为例演示一下数据层访问接口如何实现,以及实现中需要注意的地方. 1. 添加EF Core 先 ...
- 菜鸟入门【ASP.NET Core】13:Individual authentication 模板、EF Core Migration
Individual authentication 模板 我们首先用VSCode新建一个mvc的网站,这个网站创立的时候回自动为我们创建Identuty Core以及EF Core的代码示例,我们可以 ...
- EF core的原生SQL查询以及用EF core进行分页查询遇到的问题
在用.net core进行数据库访问,需要处理一些比较复杂的查询,就不得不用原生的SQL查询了,然而EF Core 和EF6 的原生sql查询存在很大的差异. 在EF6中我们用SqlQuery和Exe ...
- .Net Core建站(1):EF Core+CodeFirst数据库生成
emmm,本来想着用Core做一个小项目玩玩的,然后肯定是要用到数据库的, 然后想,啊,要不用CodeFirst,感觉很腻害的样子,于是,一脸天真无邪的我就踏入了一个深不见底的天坑... 本来想着,应 ...
- .Net Core建站(2):EF Core+CodeFirst数据库迁移
上一篇的话,说了下怎么使用EF7 实现 CodeFirst去生成数据库, 其实还有好多问题的,这次一点一点的解决吧,都挺简单,不过零零散散的,, 1.读取配置文件,获得链接字符串 2.使用数据库进行增 ...
- [翻译 EF Core in Action 1.10] 应该在项目中使用EF Core吗?
Entity Framework Core in Action Entityframework Core in action是 Jon P smith 所著的关于Entityframework Cor ...
随机推荐
- C++实现vector
用了双向链表,快排,<<,=,[]重载,还有erase的实现比较好玩 //my Vecter ;T need "operator<" #include <i ...
- HTML 5 视频(video)
video 元素支持三种视频格式 IE Firefox Opera Chrome Safari 带有 Theora 视频编码和 Vorbis 音频编码的 Ogg 文件 No 3.5+ 10.5+ 5. ...
- Weblogic部署项目过程中的一些问题
weblogic启动,最后一段出现的警告: <Warning> <Log Management> <BEA-170011> <The LogBroadcast ...
- ubuntu快捷复制粘贴
今天使用putty,纠结复制粘贴的时候,才发现 原来只要选中文本后,就可以中键粘贴 整个桌面环境可用,新技能啊以前居然不知道
- 10款最新流行的 jQuery 插件,值得你收藏
10款最新流行的 jQuery 插件,值得你收藏 http://www.cnblogs.com/lhb25/p/10-new-popular-jquery-plugins-check.html 你应该 ...
- socket - socketserver - start TCP server
前面提到如何使用socket模块启动tcpserver: 创建socket:sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 绑定ip: ...
- 在Ubuntu16.04集群上手工部署Kubernetes(未完,陆续补充中)
主机信息 主机 IP OS k8s-master 10.10.10.20192.168.0.20 Ubuntu Server 16.04 k8s-node1 10.10.10.21192.168.0. ...
- Thinking in Java——笔记(11)
Holding Your Objects In general, your programs will always be creating new objects based on some cri ...
- Ubuntu 14.04 编译安装 husky
简介 Husky是一个大数据分布式开发框架,用C++开发,因为粗粒度(coarse-grained)平台(如Spark,Hadoop,Flink)MR耗时太大,然后细粒度(fine-grained)平 ...
- 简单理解call_user_func和call_user_func_array两个函数
call_user_func():调用一个回调函数处理字符串, 可以用匿名函数,可以用有名函数,可以传递类的方法, 用有名函数时,只需传函数的名称 用类的方法时,要传类的名称和方法名 传递的第一个参数 ...