官方文档英文地址: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) 比如 ReloadGetModifiedProperties,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月底发布)的更多相关文章

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

    本文转自:http://www.cnblogs.com/VolcanoCloud/p/5572408.html 官方文档英文地址:https://github.com/aspnet/EntityFra ...

  2. 使用Asp.Net Core MVC 开发项目实践[第二篇:EF Core]

    在项目中使用EF Core还是比较容易的,在这里我们使用的版本是EF Core 2.2. 1.使用nuget获取EF Core包 这个示例项目使用的是SQLSERVER,所以还需要下载Microsof ...

  3. 在.net core程序中使用EntityFrameok(非EF Core)

    最近用NoSQL较多写,用传统的EF到不多,但在一些.net core小程序中也小试牛刀过,不过当时用的是微软为.net core量身定制的Entity Framework Core,只是一些比较常规 ...

  4. 【asp.net core 系列】8 实战之 利用 EF Core 完成数据操作层的实现

    0. 前言 通过前两篇,我们创建了一个项目,并规定了一个基本的数据层访问接口.这一篇,我们将以EF Core为例演示一下数据层访问接口如何实现,以及实现中需要注意的地方. 1. 添加EF Core 先 ...

  5. 菜鸟入门【ASP.NET Core】13:Individual authentication 模板、EF Core Migration

    Individual authentication 模板 我们首先用VSCode新建一个mvc的网站,这个网站创立的时候回自动为我们创建Identuty Core以及EF Core的代码示例,我们可以 ...

  6. EF core的原生SQL查询以及用EF core进行分页查询遇到的问题

    在用.net core进行数据库访问,需要处理一些比较复杂的查询,就不得不用原生的SQL查询了,然而EF Core 和EF6 的原生sql查询存在很大的差异. 在EF6中我们用SqlQuery和Exe ...

  7. .Net Core建站(1):EF Core+CodeFirst数据库生成

    emmm,本来想着用Core做一个小项目玩玩的,然后肯定是要用到数据库的, 然后想,啊,要不用CodeFirst,感觉很腻害的样子,于是,一脸天真无邪的我就踏入了一个深不见底的天坑... 本来想着,应 ...

  8. .Net Core建站(2):EF Core+CodeFirst数据库迁移

    上一篇的话,说了下怎么使用EF7 实现 CodeFirst去生成数据库, 其实还有好多问题的,这次一点一点的解决吧,都挺简单,不过零零散散的,, 1.读取配置文件,获得链接字符串 2.使用数据库进行增 ...

  9. [翻译 EF Core in Action 1.10] 应该在项目中使用EF Core吗?

    Entity Framework Core in Action Entityframework Core in action是 Jon P smith 所著的关于Entityframework Cor ...

随机推荐

  1. C++实现vector

    用了双向链表,快排,<<,=,[]重载,还有erase的实现比较好玩 //my Vecter ;T need "operator<" #include <i ...

  2. HTML 5 视频(video)

    video 元素支持三种视频格式 IE Firefox Opera Chrome Safari 带有 Theora 视频编码和 Vorbis 音频编码的 Ogg 文件 No 3.5+ 10.5+ 5. ...

  3. Weblogic部署项目过程中的一些问题

    weblogic启动,最后一段出现的警告: <Warning> <Log Management> <BEA-170011> <The LogBroadcast ...

  4. ubuntu快捷复制粘贴

    今天使用putty,纠结复制粘贴的时候,才发现 原来只要选中文本后,就可以中键粘贴 整个桌面环境可用,新技能啊以前居然不知道

  5. 10款最新流行的 jQuery 插件,值得你收藏

    10款最新流行的 jQuery 插件,值得你收藏 http://www.cnblogs.com/lhb25/p/10-new-popular-jquery-plugins-check.html 你应该 ...

  6. socket - socketserver - start TCP server

    前面提到如何使用socket模块启动tcpserver: 创建socket:sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 绑定ip: ...

  7. 在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. ...

  8. Thinking in Java——笔记(11)

    Holding Your Objects In general, your programs will always be creating new objects based on some cri ...

  9. Ubuntu 14.04 编译安装 husky

    简介 Husky是一个大数据分布式开发框架,用C++开发,因为粗粒度(coarse-grained)平台(如Spark,Hadoop,Flink)MR耗时太大,然后细粒度(fine-grained)平 ...

  10. 简单理解call_user_func和call_user_func_array两个函数

    call_user_func():调用一个回调函数处理字符串, 可以用匿名函数,可以用有名函数,可以传递类的方法, 用有名函数时,只需传函数的名称 用类的方法时,要传类的名称和方法名 传递的第一个参数 ...