官方文檔英文地址:https://github.com/aspnet/EntityFramework/wiki/Roadmaphtml
歷經延期和改名,新版本的實體框架終於要和你們見面了,雖然還有點害羞。請你們多體諒! 下面正式進入主題:git
下面是EF Core 的計劃和技術線路,注意,這些計劃是可能發現變化的,由於不少事是很難預測的。即使如此,咱們仍是儘量保持計劃的公開和透明,以解你們對EF Core指望,以及作出相應的安排。github
發佈初始版本的時間,咱們計劃是與ASP.NET Core 保持一致(ASP.NET Core 的發佈時間請參考這裏)(譯註:方便你們查看,已把你們最關心的部分放在下面,最後一行就是EF Core 的發佈時間 2016 年6年末)sql
EF Core 與ASP.NET Core 不存在嚴密的掛鉤(由於EF Core 在ASP.NET以外還有不少運用場景),但它是ASP.NET Core不可或缺的一部分,所以在發佈ASP.NET Core時,咱們必須提供一個穩定的EF Core 版本,這很重要!數據庫
由於EF Core 是一個新的代碼庫(譯註:徹底重寫),所以,以前版已有的一些特性在EF Core中,不必定提供。基於此,咱們列出了第一個版本已經實現和計劃實現的特性。api
咱們也列出了咱們認爲很重要的特性,但EF Core 初始版本並沒實現 。也就是說,在這些特性沒有在EF Core中實現時,EF6.x對於不少應用仍然是最好的選擇。架構
下面列出的特性EF Core已經實現,並已經包含是官方的pre-release(預覽版)。注意下面的特性也許還存在bug,提供的API也有可能會在正式版本中發生變化 ,由於咱們還在爲第一個穩定的版本而努力。併發
Basic modelling(基本建模) 基於POCO實體的get/set屬性,支持來至BCL(基礎類庫)的基礎類型(好比int, string 等);app
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(關係:表映射) 容許實體被映射到表或是列;
Snapshot change tracking(跟蹤快照) 基於從數據庫中獲取的實體的原始值 ;
Notification change tracking(通知跟蹤變動)容許你的實體在屬性值發生變動時通知變動跟蹤器;
Accessing tracked state(訪問跟蹤狀態) 訪問實體的狀態(經過via DbContext.Entry
和 DbContext.ChangeTracker
);
Attaching detached entities/graphs 提供新的API DbContext.AttachGraph幫助你附加實例到上下文中,以便保存新建立或是變動後的實體;
Basic save functionality(基本的保存功能) 容許持久化一個實體的實例到數據庫中;
Optimistic Concurrency(樂觀併發) 當另外一個用戶從數據庫中獲取數據後,若是你試圖對該數據進行更改並提交,這將被阻止;
Async SaveChanges (異步保存) 當數據庫處理請求時,釋放當前線程以處理別的請求;
Transactions(事務) 意味着,SaveChanges老是一個原子操做(要麼所有成功,要麼對數據加作任何修改(回滾)),同時提供API,讓兩個不一樣的上下文實例共享事務;
Relational: Batching of statements(關係數據庫:批量語句) 經過在一次數據庫請求中批量處理 INSERT/UPDATE/DELETE,來提供更好的性能;
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 creation/deletion APIs 在不想使用migrations時,快速建立、刪除數據庫,用於測試;
Relational database migrations 當模型發生變化時,容許關係弄數據庫更新構架(schema);
Reverse engineer from database 基於一個存在的數據庫生成模型;
EntityFramework.SqlServer 鏈接Microsoft SQL Server 2008及其以上的版本;
EntityFramework.Sqlite 鏈接到SQLite3數據加;
EntityFramework.InMemory 用於測試,鏈接時,不用鏈接到一個真正的數據庫;
Postgres 支持使用Npgsql開發;
SQL Compact 支持使用 ErikEJ開發;
Full .NET 包含 Console, WPF,WinForms,ASP.NET4等;
.NET Core(包含 ASP.NET Core) 目標是支持 Windwos,OSX,和Linux上運行的Full.NET 和.NET Core;
Universal Windows Platform(UWP) 可使用SQLite提供服務訪問本地數據庫;
爲發佈1.0.0,咱們正聚焦於下面的工做:
這不是一個詳盡的列表,但列出來一些重要的且當前版本的EF Core還未實現的特性。
下面列出這些特性實現後,咱們將把EF Core做爲EF中的推薦版本,特別是在EF6.x不能使用的地方(好比,UWP和.NET Core),但在沒有實現前,不少應用的首選仍然是EF6.x;
Improved translation 能執行大量的查詢,讓更多的邏輯在數據進行求值,而不是在內存中;
GroupBy translation 把LINQ GroupBy操做符分組的邏輯放到數據庫去執行,而不是在內存中;
Lazy loading 當訪問導航屬性時,自動從數據庫獲取數據;
Explicit Loading 容許你提早加載實體的一個大數據量的導航屬性;
Raw SQL querys for non-Model types 容許你使用一個原生的SQL命令去填充一個非模型類型的對象(一般是非規範化的 view-model);
Visual Studio Wizard for reverse engineer 當你從數據庫生成模型(譯註:這裏的模型是指code -first 模型)時,容許你可視化地配置鏈接、選擇表、等等。
Update model from database 當數據庫架構發生變動時,容許你更新以前從數據庫生成的模型;
Complex/value type(複雜類型/值類型) 表示實體的一個屬性集,沒有主鍵;
Missing EntityEntry APIs from EF6.x(EF6.x中缺乏的的EntityEntry APIs) 好比 Reload
, GetModifiedProperties
,GetDatabaseValues
等等;
Stroed procedure maping(存儲過程映射) 容許EF使用存儲過程向數據庫持久化更變(FromSql 方法已經提供了很好的支持);
View mapping(視圖映射) 容許EF 映射數據庫視圖;
Connection resiliency (彈性鏈接) 自動重試在數據庫中執行失敗的命令,當你鏈接到SQL Azure時很是有用,在這種狀況(鏈接到SQL Azure)失敗是正常的。
在咱們的待開發特性中,下面列出的這些特性具備較高的優先級,固然這也不多是一個確切的列表。雖然他們還未實現,但這並不影響EF Core 成爲使人激動的版本。
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;
Seed data 容許一組數據很容易被插入(upserted);
Etag-style concurrency token support;
Eager loading rules 容許實體被查詢時,與之關聯的默認數據集老是被獲取;
Filtered loading 容許你加載實體對象的一個子集;
Simple command interception 提供一種簡單的方式,在命令發送到數據庫前或後,對基進行讀或寫;
Azure Table Storage
Redis
Other non-relational databases(其它非關係弄數據庫)