Entity Framework架構介紹
Entity Framework 整體架構如圖:
Entity Data Model(EDM)是類和數據庫之間的映射模型,它包含三個映射文件。
LINQ to Entities和Entity SQL是查詢對象模型的兩種語言。
Object Services層在執行查詢時將查詢轉換為一個命令樹,并將這個命令樹傳遞給Entity Client;在返回結果時將Entity Client層獲取的對象表格式數據轉換為對象,同時它也負責管理對象狀態,跟蹤對象的改變。
Entity Client data provider層又稱為Entity Client主要將LINQ to Entities和Entity SQL的查詢轉換為SQL語句,同時將數據庫表格式數據轉換為對象表格式數據,并傳遞給Object Services層。
1、EDM
EDM由三個XML文件組成,三個文件主要提供相關的metadata。如表:
Filename | Description | Alternative name | Extension |
Conceptual model | Describes the model classes and their relationships |
Conceptual schema, conceptual side |
CSDL |
Storage model | Describes the database tables, views, and stored procedures, and their keys and relationships |
Storage schema, storage side | SSDL |
Mapping model | Maps the conceptual and storage models |
Mapping schema, mapping side | MSL |
在運行時,這些文件將被解析為對象,這些對象可以被查詢從而獲得類,數據庫以及映射的metadata,當Entity Framework進行映射時,它會查詢EDM從而獲取metadata。
Visual Studio的EF designer team設計了新的文件EDMX文件,EDMX文件將上述三個文件集合起來同時加入了設計器需要的信息,然而,EDM才是真正的映射層,在編譯時,EDMX文件將被分割開,并產生三個EDM文件。
2、Object Services
Object Services在EF中主要負責管理對象。
當執行查詢時,Object Services將查詢轉換為一個命令樹,并將這個命令樹傳遞給Entity Client,這一過程稱為查詢轉換,轉換過程會因使用LINQ to Entities或者Entity SQL而不同。
當返回結果時,Object Services將Entity Client層獲取的對象表格式數據轉換為對象,之所以成為對象表格式數據,是因為它與數據庫存儲的數據庫表格式數據有所不同,對象表格式數據的沒一行代 表一個對象,如果它有屬性引用其它類,它的列將會含有該類的整個行,這一過程稱為object materialization,例如:
Context是Object Services和用戶的接口,它像一個緩存一樣保存著當前的對象模型,這些對象同時被state manager跟蹤,這個機制將會管理對象的改變,并在適當時候正確的更新到數據庫。
3、Entity Client
在執行查詢時,Entity Client將命令數轉換為SQL語句,在返回結果時,Entity Client將數據庫表格式數據轉換為對象表格式數據,并傳遞給Object Services層。