學習EF的前提:熟練使用Linq和Ado.net,由於在使用EF框架進行開發時,咱們大多數狀況使用Linq進行查詢和操做,而EF的底層實現用的是Ado.net。html
在.NET3.5以前,咱們常常編寫ADO.NET代碼或企業數據訪問塊來保存或檢索底層數據庫中的數據。作法是:打開過一個數據庫的鏈接,建立一個DataSet來獲取或提交數據到數據庫,經過將DataSet中的數據和.NET對象相互轉換來知足業務需求。這是一個麻煩且容易出錯的過程。Microsoft提供了「Entity Framework」框架,用於自動地執行全部上述與數據庫相關的活動。
EF是一個適用於.NET開發的開源ORM框架。它使開發人員可以經過領域對象來處理數據,而無需關注存儲此數據的基礎數據庫。使用實體框架,開發人員在處理數據時能夠在更高的抽象級別上工做,而且與傳統應用程序相比,可使用更少的代碼建立和維護面向數據的應用程序。
官方定義:「實體框架是一種對象關係映射器(O/RM),它使.NET開發人員可以經過.NET對象來操做數據庫。它消除了開發人員一般須要編寫的大多數數據訪問代碼的需求。「數據庫
實體框架工做在業務實體(域類)和數據庫之間。它保存實體屬性中的數據到數據庫,也能夠從數據庫中檢索數據並自動將其轉換爲實體對象。
緩存
這裏簡單地總結EF的特性,之後詳細總結併發
1.跨平臺 EF Core是一個跨平臺的框架,能夠在Windows,Linux和Mac上運行。 2.建模 EF能夠建立具備不一樣數據類型get / set屬性的EDM(Entity Data Model/實體數據模型)。它使用此模型查詢或保存底層數據庫的數據。 3.查詢 EF容許咱們使用LINQ從底層數據庫中檢索數據,同時也支持直接對數據庫執行原始SQL查詢。 4.更改跟蹤 EF會跟蹤須要提交到數據庫的實體實例(屬性值)發生的更改。 5.保存 EF調用SaveChanges()方法時,根據實體發生的更改,對數據庫執行INSERT,UPDATE和DELETE命令。EF還提供了異步的SaveChangesAsync()方法。 6.併發 默認狀況下,從數據是從數據庫中提取開始,EF使用樂觀併發來避免咱們作的修改被其餘用戶覆蓋。 7.事務 EF在查詢或保存數據時自動執行事務管理。它還提供自定義事務管理的選項。 8.緩存 EF包括開箱即用的第一級緩存。所以,重複查詢將從緩存中返回數據,而不是訪問數據庫。 9.配置 EF容許咱們使用註釋屬性配置EF模型,也可使用Fluent API來覆蓋默認約定。 10.遷移 EF提供了一組遷移命令,咱們能夠在NuGet Package Manager控制檯或命令行界面中執行這些命令來建立或管理底層數據庫計劃。
下圖很好地說明了EF的基本組成:app
EF的組成簡單總結以下:框架
一、EDM(實體數據模型): EDM包含三個主要部分——概念模型,映射和存儲模型。異步
概念模型(entity): 概念模型包含了模型類和它們之間的關係。 這將是獨立於數據庫表設計。數據庫設計
存儲模型(data): 存儲模型是數據庫設計模型,包括表、視圖、存儲過程、以及它們之間的關係和鑰匙。ide
映射(mapping): 映射由概念模型如何映射到存儲模型的信息組成。post
二、LINQ To Entity(L2E): L2E是一種的查詢實體對象的語言, 它返回在概念模型中定義的實體。
三、Entity SQL: Entity SQL是一個相似於L2E的查詢語言。 然而,它比L2E更加複雜。
四、Object Services(對象服務):對象服務是訪問數據庫中的數據並返回數據的主要入口點。它負責數據實例化,把Entity Client Data Provider(下一層)的數據轉換成實體對象。
五、Entity Client Data Provider:主要職責是將L2E或Entity Sql轉換成數據庫能夠識別的Sql查詢語句,它經過ADO.Net Data Provider向數據庫發送或者索取數據。
六、ADO.Net Data Provider:使用標準的Ado.net與數據庫通訊。
EF系列目錄連接:Entity Franmework系列教程彙總