1.Entity Framwwork體系結構圖

Entity Framework的體系結構主要包括:EDM元資料、Entity Client、Object Services和ADO.NET Provider四部分,其中EDM是整個Entity Framework框架實作ORM最核心的部分,下面的章節會對圖中Entity Framework的體系結構逐一進行介紹,
2.EDM
EDM(Entity Data Model)譯為物體資料模型,它主要的作用是能夠將資料庫中的物件(表、視圖、存盤程序等)映射為C#中的物體類,從而實作操作物體類就等同于操作資料庫物件,
EDM的組成結構包含:CSDL(概念層)、SSDL(存盤層)、對應層(MSL),
CSDL:是EDM最核心的部分也叫作概念模型,在創建Entity Framework后會根據資料庫中的物件(表、視圖、存盤程序等)生成物體類,CSDL對應的就是這些物體類的描述資訊,
SSDL:描述資料庫物件(表、視圖、存盤程序等)的資訊,也就是將資料庫中的物件資訊加載到了Entity Framework中,并描述資料庫物件的結構資訊,
MSL:負責CSDL(概念層)和SSDL(存盤層)的映射關系,根據MSL的映射資訊可以將物體類映射為資料庫中的具體物件,這樣就可以知道我們在操作某個物體類時對應到資料庫操作的是那個物件(表、視圖、存盤程序等),
對應映射方式如圖:

另外在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”檔案可以找到該檔案,

資料庫背景關系類中將所有物體類作為了自己成員,我們對資料物體的的所有操作都需要該類來完成,簡單的理解“資料背景關系類”,它就相當于一個資料庫的管理者,通過該來完成所有對資料的操作,

從背景關系類中包含的資訊可以看出,資料表變成了屬性、存盤程序變成了方法,
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/62.html
上一篇:使用Npgsql實作面向PostgreSQL的LINQ to Entities(OR Linq To PostgreSQL)
