1.Entity Framwwork體系結構圖數據庫
Entity Framework的體系結構主要包括:EDM元數據、Entity Client、Object Services和ADO.NET Provider四部分。其中EDM是整個Entity Framework框架實現ORM最核心的部分。下面的章節會對圖中Entity Framework的體系結構逐一進行介紹。app
2.EDM框架
EDM(Entity Data Model)譯爲實體數據模型,它主要的做用是可以將數據庫中的對象(表、視圖、存儲過程等)映射爲C#中的實體類,從而實現操做實體類就等同於操做數據庫對象。編輯器
EDM的組成結構包含:CSDL(概念層)、SSDL(存儲層)、對應層(MSL)。ide
CSDL:是EDM最核心的部分也叫做概念模型。在建立Entity Framework後會根據數據庫中的對象(表、視圖、存儲過程等)生成實體類,CSDL對應的就是這些實體類的描述信息。spa
SSDL:描述數據庫對象(表、視圖、存儲過程等)的信息,也就是將數據庫中的對象信息加載到了Entity Framework中,並描述數據庫對象的結構信息。插件
MSL:負責CSDL(概念層)和SSDL(存儲層)的映射關係,根據MSL的映射信息能夠將實體類映射爲數據庫中的具體對象,這樣就能夠知道咱們在操做某個實體類時對應到數據庫操做的是那個對象(表、視圖、存儲過程等)。翻譯
對應映射方式如圖:3d
另外在Entity Framework項目中,圖中的三部份內容以一個XML定義並描述其中的信息,該信息存放在名爲.edmx後綴的文件中。對象
3.Entity Client
咱們知道ADO.NET操做數據庫會有一套核心類庫來實現,其中包括Connection、Command等,一樣Entity Client模擬了ADO.NET實現了這些核心類庫來對數據庫操做。ADO.NET的核心操做類庫是向數據庫發送SQL來實現操做,而Entity Client是向EDM發送Entity SQL操做實體。咱們能夠總結理解:Entity Client模仿了ADO.NET核心類庫從而實現了對數據的操做能力。
4.Object Services
簡單來理解就是咱們在使用實體類處理數據使用的方法。一般在操做Entity Framework實體對象時會兩種方法:SQO(標準查詢運算符方法)、LINQ。
如圖:
圖中的代碼片斷分別使用了SQO(標準查詢運算符方法)和LINQ兩種方法來操做實體對象,這種能夠操做EF實體對象來實現數據操做的方法能夠理解爲Object Services。
5. ADO.NET Provider
無論EF有多少種體系結構最終處理後都要和數據庫進行打交道(訪問)。而負責與數據進行訪問的就是ADO.NET Provider來完成的。上述的Entity Client雖然也和ADO.NET有過關係,可是Entity Client只是模擬ADO.NET對數據的操做方式,並生成操做命令。ADO.NET Provider會將Entity client的操做命令翻譯爲數據庫的SQL語句來對數據庫進行執行。
一般ADO.NET Provider對數據庫的訪問還必須有數據庫廠商提供的插件進行支持,VS默認並僅僅實現了對SQL Server的訪問提供。若是須要使用其餘的數據庫來實現Entity Framework 還須要單獨去對應的數據庫廠商下載單獨的數據訪問插件來實現。
6. edmx文件
在項目中建立Entity Framework框架後會在項目中生成一個edmx後綴的文件,展開文件結構如圖:
6.1.edmx文件XML信息
Edmx文件默認打開是一個圖形化的界面描述了實體的模型信息,要以XML文件的方式打開須要對文件進行右擊,在彈出的快捷菜單中選擇「打開方式」選項,可彈出以下界面:
在該界面中選擇「自動編輯器選擇程序XML」單擊肯定按鈕打開,打開後如圖:
從圖中能夠看到XML中包含了SSDL、CSDL、CS mapping三種類型的節點,三個節點分別對應了EDM中的存儲層、概念層、對應層。該文件是Entity Framework實現ORM的關鍵配置文件。
SSDL節點內容
從XML節點的內容來看就能夠理解SSDL的概念,SSDL中包含了數據中全部對象並將全部對象以XML結構進行展現,從XML的節點和屬性的定義來看SSDL徹底描述了數據庫中的信息。
CSDL節點內容
CSDL節點下的內容描述了實體類的各類信息,結合SSDL的內容能夠看出每一個項目在CSDL中都有一個一一對應的關係。
CS Mapping節點內容
根據CS Mapping節點內容EF底層能夠弄清每一個實體類對應到數據庫中關係信息,從而實現數據庫的操做。
6.2.實體文件
在倒數第一個後綴名爲tt的文件展開後,能夠獲取到數據庫全部對象(表、視圖、存儲過程等)對應生成實體類,這塊的實體類是和數據庫中的對象一一對應的。
結構參考如圖:
6.3.數據上下文類
擴展名爲「.Context.cs」的類爲數據上下文類,展開「.Context.tt」文件能夠找到該文件。
數據庫上下文類中將全部實體類做爲了本身成員,咱們對數據實體的的全部操做都須要該類來完成。簡單的理解「數據上下文類」,它就至關於一個數據庫的管理者,經過該來完成全部對數據的操做。
從上下文類中包含的信息能夠看出,數據表變成了屬性、存儲過程變成了方法。