Entity Framework 一覽
EF集合了一系列以方便使用資料的應用程式的開發。和微軟之前的資料訪問技術不一樣,EF和Visual Studio一起,構成了一個全面的、基於模型的生態系統,你可以用它來開發一些範圍廣泛的資料導向的應用程式。 比如用Asp.net和Sliverlight開發傳統型程式、伺服器端程式、Internet程式,用WCF的分布式多機程式等。
Model
EF其實所做的所有工作都是為了構建模型。模型在EF中代表的意義不是憑空冒出而是逐漸演化的。在EF中有很多地方都是受到以往技術和模式的遺傳影響。比如實體關聯圖和長時間都在用的概念-邏輯-物理分層設計的方法。
EF用Entity Data Model(EDM)來標誌模型。EDM是一種用來定義程式中用到的資料的正式結構,它定義了資料類型、明確哪種類型的關聯是允許的、模型支援的schemas以及在不同schemas中的映射。(schemas不好翻譯,資料庫中術語,可以叫模式,db->schemas->tables)。程式你建的模型就是對應著EDM中的條目來的,這有點像EDM就是一個Class(類),而模型都是滿足它的Instance(執行個體),但只是有點像而已,它們是不一樣的,EDM中的是定義模型的結構。
好吧,現在牽扯出來了很多術語了。首先,一個Model(模型)由三層組成:概念層、儲存層和映射層。每一層的文法都是在一個XML檔案中表示的,schema也在這個XML中有定義。為了方便,這三層的三個不同的XML檔案都綁在了一起,構成了一個尾碼名為.edmx的檔案。
概念層模型,是開發人員實際能接觸的,這一層中已經沒有實體儲存體層的跡象,在CSDL(Conceptual Schema Definition Language)中定義。VS提供了一個功能齊全的設計介面,你可以直接在概念層上操作實體類型和各種關係。概念層模型是在CSDL中定義的。
任何有用的程式都要有資料的持久化操作,在儲存層我們定義資料的儲存。它包括了表、列和資料類型的定義,這在SSDL(Store Schema Definition Language)中有記錄。
在概念層和儲存層的映射層就是把這兩層各自的模型映射在一起。比如這個類中的屬性怎麼和資料庫中的那個欄位關聯起來。這些細節在MSL(Mapping Specification Language)中定義。
一些術語
EntityType(實體類型) ,它是一個類,定義了一個新的類型。它的執行個體叫做Entity,但經常都被統一叫做了Entity。Entity Type中定義了一些屬性,包括有純量屬性(Scalar)、複雜屬性(Complex type)和導覽屬性(navigation)。1-1,定義了兩個EntityType:Employee和Task。它們之間的關係是一對多的。
圖1-1
Association(關聯) 也如,兩個實體類型之間的關係叫做 Association 。有一對多,多對一,多對多和自身關聯。每一個EntityType都是一個EntityKey屬性,相當於主鍵標識,通常是由下層資料庫中的實際主鍵決定的。
EntitySet (實體集) 實體集就是一些EntityType執行個體的集合,或者也包含它的衍生類別型。在多數情況下,給定EntityType的執行個體們都是在同一個實體集裡的,但也有例外,叫MEST(Multiple EntitySets per Type),這個以後我們會講到一個例子。
ComplexType (複雜類型)是相關屬性的一個集合.複雜類型不像實體類型一樣有一個主鍵標識,它更像是把一堆相關的屬性群組合到一起,形成一個新的屬性。圖1-2就是一個很好的例子。Customer有正常的純量屬性(Id,Name,Phone),但同時又有兩個複雜屬性BillingAddress和ShipToAddress,這兩個複雜屬性都屬於同一個Adrress的複雜類型。Address類型中包含了各種資訊,但沒有一個可以說是主鍵的,它們只是一對相關屬性的集合。
圖1-2
Navigation properties(導覽屬性)這個是在資料庫中有直接外鍵關係的,EF可以通過它從一張表導航連結到另外一張表。