這次開發項目。我依舊做的是.Net,前幾個月的項目底層設計使用的的是 ORM 思想。技術選用的是NHibernate。這次也不例外,開發.Net項目。依舊使用的是ORM的思想。不同的是這次開發技術選用的是EF(EntityFrameWork)。這個架構但是讓我費眼不少。我了解它,從它的XML開始的。開始說說有關EF中xml的解讀。
一、EnityFramework
EnityFramework的全程是ADO.NET Entity Framework 。和Nhibernate一樣。EF 相同是遵守ORM的思想。利用了抽象化資料結構的方式,将每一個資料庫對象都轉換成應用程式對象 (entity)。而資料字段都轉換為屬性 (property)。關系則轉換為結合屬性 (association),讓資料庫的 E/R 模型全然的轉成對象模型。如此讓程式設計師能用最熟悉的程式設計語言來調用訪問。
EF是怎樣來實作這個原理的呢?
EF中存在一個基本的檔案:*.edm 。這就是EF的核心。
EF以EDM( Entity Data Model ) 為主。将資料邏輯層切分為三塊,分别為 Conceptual Schema, Mapping Schema 與 Storage Schema 三層,其上還有 Entity Client。Object Context 以及 LINQ 能夠使用,今天咱們讨論的是EDM。先看圖:

這三層的功能各自是:
(1) 概念層:負責向上的對象與屬性顯露與訪問。
(2) 相應層:将上方的概念層和底下的儲存層的資料結構相應在一起。
(3) 儲存層:依不同資料庫與資料結構,而顯露出實體的資料結構體,和 Provider 一起。負責實際對資料庫的訪問和 SQL 的産生。
這樣協同工作讓資料訪問的工作得以順利與完整的進行。
二、edm相應的XML
edm 有三層。與之相應的xml也有三層:csdl(Conceptual Schema Definition Language),msl(Mapping Specification Language),ssdl(Storage Schema Definition Language)。
1、CSDL基本結構
這個檔案全然以程式語言的角度來定義模型的概念。
即當中定義的實體、主鍵、屬性、關聯等都是相應于.NET Framework中的類型。以下是csdl的基本結構。沒有實體關聯:
每一個節點含義例如以下。
EntityContainer
Name
EntityContainer的名稱。其将作為産生的ObjectContext類的名稱
EntitySet
ObjectContext内與此Entity類型相應的屬性名
EntityType
ObjectContext内與此Entity類型相應的屬性的類型
AssociationSet
End
有兩個End子節點,分别描寫叙述建立此關系的兩個EntitySet
Role
相應到Association中End節的Role屬性。起到将AssociationSet與Association相關連的作用。
注意:假設 該實體有與其它實體關聯。有例如以下變動:
(1):那麼在EntityContainer中就會多出一個Association節點,Association節,這是真正定義關系的地方。看例如以下執行個體:
(2)EntityType節點中添加:NavigationProperty節點
詳細節點的含義例如以下:
Entity Class的名稱
Abstract
是否為抽象類
BaseType
父類
Key
主鍵
Property
主鍵之屬性
屬性名
屬性
Type
屬性類型
Nullable
是否同意null
MaxLength
屬性最大長度
FixLength
是否固定長度
NavigationProperty
關系屬性
這就是主要的CSDL ,你在edm中加入一個實體,用模型畫出來的。然後通過打開XML方式來檢視,對照XML中的csdl ,你會發現兩者一樣。
下篇繼續:edm中ssdl。
本文轉自mfrbuaa部落格園部落格,原文連結:
本文轉自mfrbuaa部落格園部落格,原文連結:http://cnblogs.com/jiqing9006/category/886175.html,如需轉載請自行聯系原作者