什么是Entity Framework
學習EF的前提:熟練使用Linq和Ado.net,因為在使用EF框架進行開發時,我們大多數情況使用Linq進行查詢和操作,而EF的底層實現用的是Ado.net
1.EF的概念
在.NET3.5之前,我們經常編寫ADO.NET代碼或企業數據訪問塊來保存或檢索底層數據庫中的數據。做法是:打開過一個數據庫的連接,創建一個DataSet來獲取或提交數據到數據庫,通過將DataSet中的數據和.NET對象相互轉換來滿足業務需求。這是一個麻煩且容易出錯的過程。Microsoft提供了“Entity Framework”框架,用於自動地執行所有上述與數據庫相關的活動。
EF是一個適用於.NET開發的開源ORM框架。它使開發人員能夠通過領域對象來處理數據,而無需關注存儲此數據的基礎數據庫。使用實體框架,開發人員在處理數據時可以在更高的抽象級別上工作,並且與傳統應用程序相比,可以使用更少的代碼創建和維護面向數據的應用程序。
官方定義:“實體框架是一種對象關系映射器(O/RM),它使.NET開發人員能夠通過.NET對象來操作數據庫。它消除了開發人員通常需要編寫的大多數數據訪問代碼的需求。“
實體框架工作在業務實體(域類)和數據庫之間。它保存實體屬性中的數據到數據庫,也可以從數據庫中檢索數據並自動將其轉換為實體對象。
2.EF功能匯總
這里簡單地總結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控制台或命令行界面中執行這些命令來創建或管理底層數據庫計划。
3.EF組成
下圖很好地說明了EF的基本組成:
EF的組成簡單總結如下:
1、EDM(實體數據模型): EDM包含三個主要部分——概念模型,映射和存儲模型。
概念模型(entity): 概念模型包含了模型類和它們之間的關系。 這將是獨立於數據庫表設計。
存儲模型(data): 存儲模型是數據庫設計模型,包括表、視圖、存儲過程、以及它們之間的關系和鑰匙。
映射(mapping): 映射由概念模型如何映射到存儲模型的信息組成。
2、LINQ To Entity(L2E): L2E是一種的查詢實體對象的語言, 它返回在概念模型中定義的實體。
3、Entity SQL: Entity SQL是一個類似於L2E的查詢語言。 然而,它比L2E更加復雜。
4、Object Services(對象服務):對象服務是訪問數據庫中的數據並返回數據的主要入口點。它負責數據實例化,把Entity Client Data Provider(下一層)的數據轉換成實體對象。
5、Entity Client Data Provider:主要職責是將L2E或Entity Sql轉換成數據庫可以識別的Sql查詢語句,它通過ADO.Net Data Provider向數據庫發送或者索取數據。
6、ADO.Net Data Provider:使用標准的Ado.net與數據庫通信。