[轉]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 的計劃和技術線路,註意,這些計劃是可能發現變化的,因為很多事是很難預測的。即便如此,我們還是盡可能保持計劃的公開和透明,以解大家對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月底發布)