1. 程式人生 > >[轉]EntityFramework Core技術線路(EF7已經更名為EF Core,並於2016年6月底發布)

[轉]EntityFramework Core技術線路(EF7已經更名為EF Core,並於2016年6月底發布)

整體 ont 框架 alt 不存在 sna 大量 provider 文檔

本文轉自: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.EntryDbContext.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(預先加載) 提供方法IncludeThenInclude來標識相關聯的數據在查詢時,一起被獲取;

    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 中的geographygeometry;

    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月底發布)