搜尋本站文章

2011-11-07

使用 Visual Studio 2010 建立實體資料模型(Entity Data Model,EDM)

示範環境:
Visual Studio 2010

實作練習:使用 Visual Studio 2010 建立實體資料模型(Entity Data Model,EDM)


步驟01. 執行 Microsoft Visual Studio 2010,在上方工具選單,點選「檔案」\「新增專案」。

選擇所要語言,選擇「Windows Form 應用程式」或是「主控台應用程式」等,點選「確定」。

步驟02. 在上方工具選單,點選「專案」\「加入新項目」。

步驟03. 在「加入新項目」視窗,在左邊窗格,點選「一般項目」,在右邊的中間窗格,選擇「ADO.NET 實體資料模型」,在下方的「名稱」方塊,輸入:myModel1.edmx,點選「新增」。

-- 01_選擇 ADO.NET 實體資料模型



步驟04. 在「實體資料模型精靈」視窗,在「模型應包含哪些內容」區域,點選「從資料庫產生」,點選「下一步」。

-- 02_選取:從資料庫產生



-- 03_若是選取:空的模型



步驟05. 在「選擇您的資料連接」視窗,點選「新增連接」。設定以下的屬性:

在「連接屬性」視窗,在「資料來源」區域,確認選取的是:Microsoft SQL Server (SqlClient)。
在「伺服器名稱」方塊,輸入指定的伺服器名稱,例如:localhost。

在「登入伺服器」區域,點選「使用 Windows 驗證」。
在「連接至資料庫」區域,在「選取或輸入資料庫名稱」方塊,下拉選取目標資料庫,例如:Northwind。

點選「測試連接」,點選「確定」\「確定」。

步驟06. 在「選擇您的資料連接」視窗,檢視下方所產生的實體連接之名稱,例如:NorthwindEntities,點選「下一步」。
此實體連接設定儲存在 App.Config 或 Web.Config 檔案中。

-- 04_選擇您的資料連接



步驟07. 在「選擇您的資料庫物件」視窗,設定以下的屬性:

在「您的模型中要包含哪些資料庫物件」區域,展開「資料表」,勾選所需的資料表,例如:Employees (dbo) 與 Orders (dbo)
勾選「將產生的物件名稱複數化或單數化」,勾選「在模型中包含外部索引鍵資料行」。

在「模型命名空間」方塊,輸入所需的名稱,例如:myNorthwindModel。

-- 05_選擇您的資料庫物件



-- 06_勾選-選擇您的資料庫物件



點選「完成」。

步驟08. 瀏覽「myModel1.edmx」視窗,所呈現的資料:

-- 07_檢視 edmx 視窗



-- 08_Employees_檢視 edmx 視窗



-- 09_Orders_檢視 edmx 視窗




在「Employees」實體,點選「導覽屬性」,檢視「屬性」視窗所的呈現資料:

-- 10_檢視整個模型的屬性



-- 11_點選Employees1導覽屬性



-- 12_點選Employee1導覽屬性



-- 13_點選Orders導覽屬性



-- 14_點選Employee下方的關聯



-- 15_「自我連結」:滑鼠雙擊,檢視此關聯,「參考限制式」視窗



-- 16_點選Employee右方的關聯



-- 17_「資料表聯結」:滑鼠雙擊,檢視此關聯,「參考限制式」視窗




在「Orders」實體,點選「導覽屬性」,檢視「屬性」視窗所的呈現資料:

-- 18_檢視Order實體



-- 19_點選Employee導覽屬性



步驟09. 在右邊的「方案總管」視窗,點選「模型瀏覽器」。

-- 20_「模型瀏覽器」視窗



步驟10. 檢視左邊的「工具箱」。

-- 21_檢視「Entity Framework 工具箱」



步驟11. 點選「Employee」實體右邊的「關聯」線,檢視其「屬性」視窗。

-- 22_點選End1 OnDelete



-- 23_點選End1 OnDelete



-- 24_點選End1 多重性



-- 25_點選End2 OnDelete



-- 26_點選End2 多重性





若是更換為 AdventureWorks2008 資料庫,選取全部的資料表,有部分物件、關連性無法產生模型。

-- 27_使用AdventureWorks2008 資料庫





實體資料模型(Entity Data Model,EDM)

實體資料模型 (EDM) 是描述資料結構的概念集,不論其預存形式為何。

EDM 借用 Peter Chen 於 1976 年描述的實體關聯模型 (Entity-Relationship Model),但同時補強實體關聯模型並延伸其傳統用法。

EDM 解決資料儲存形式過多所導致的難題。例如,試想將資料儲存在關聯式資料庫、文字檔、XML 檔、試算表及報告中的企業。

這代表著資料模型、應用程式設計及資料存取各方面的重大挑戰。
設計資料導向應用程式時,難題在於撰寫有效率且可維護的程式碼,而不需犧牲資料存取、儲存的效率及擴充性。

資料具有關聯結構時,資料存取、儲存及擴充性非常有效率,但維持寫入效率及可維護的程式碼則更為困難。

資料具有物件結構時,取捨則是相反的:必須犧牲資料存取及儲存的效率和擴充性,以換取寫入效率和可維護的程式碼。

即使能在這些取捨當中找到平衡,在不同形式之間轉移資料時仍會出現新的挑戰。
實體資料模型能夠依據獨立於任何儲存結構描述的實體和關聯來描述資料結構,因此可以解決這些難題。

這也讓資料的預存形式與應用設計和開發不相關。
同時,由於實體和關聯會以應用程式中使用資料的方式 (而非其預存形式) 來描述資料結構,因此可以隨著應用程式的演進而演進。

conceptual model是以實體和關係代表資料結構的特定表示,而且通常是以實作 EDM 概念的特定定義域語言 (DSL) 定義而成。

概念結構描述定義語言 (CSDL) 是此類特定定義域語言的範例之一。
您可以將概念模型中描述的實體和關聯視為應用程式中的抽象物件和關聯。

這樣可讓開發人員專注於概念模型,不需擔心儲存結構描述,也可以讓他們有效率地撰寫程式碼並兼顧可維護性。

同時,儲存結構描述設計人員可以專注於資料存取、儲存的效率及擴充性。
「概念模型」(Conceptual Model) 是將某些資料結構以實體和關聯性表示的特定表現方式。

--

.edmx 檔案概觀 (Entity Framework)

.edmx 檔案是一種 XML 檔案,可定義概念模型、儲存體模型,並讓這兩種模型產生對應。

.edmx 檔也包含 ADO.NET 實體資料模型設計工具 (Entity Designer) 使用的資訊,以圖形方式呈現模型。

建立 .edmx 檔案的建議做法是使用「實體資料模型精靈」。如需詳細資訊,請參閱 HOW TO:建立新 .edmx 檔案 (實體資料模型工具)。

.edmx 檔案可以包含在下列 Visual Studio 專案分類中:
(1) 應用程式專案
(2) 類別庫 (Class Library)
(3) Web 專案

--

傳統且常見的建置應用程式或服務之設計方式是將應用程式或服務分成三個部分:網域模型、邏輯模型和實體模型。

(1) 「網域模型(domain model)」會在建立模型的系統中定義實體和關聯性。

(2) 關聯式資料庫的「邏輯模型(logical model)」會將實體和關聯性正規化成含有外部索引鍵條件約束的資料表。

(3) 「實體模型(physical model)」會透過指定儲存詳細資料 (例如資料分割和索引),處理特定資料引擎的功能。

雖然資料庫管理員會調整實體模型來改善效能,不過撰寫應用程式程式碼的程式設計人員主要會透過撰寫 SQL 查詢和呼叫預存程序 (Stored Procedure),限制他們自己使用邏輯模型。

網域模型通常會當做擷取和傳達應用程式需求的工具使用,而經常當做在專案早期階段中檢視和討論,然後放棄的惰性圖表使用。

許多開發小組會略過建立概念模型,而從指定關聯式資料庫中的資料表、資料行和索引鍵開始。

Entity Framework 為模型賦予生命,方法是讓開發人員在網域模型 (在 Entity Framework 中稱為「概念」模型) 中查詢實體和關聯性,同時仰賴 Entity Framework 將這些作業轉譯成資料來源特有的命令。

如此,應用程式便不再受限於特定資料來源的硬式編碼相依性。

概念模型、儲存體模型和兩者之間的對應會以 XML 架構的結構描述來表示,並定義於具有對應副檔名的檔案中。

(1) 概念結構定義語言 (Conceptual schema definition language,CSDL) 會定義概念模型。 CSDL 是實體資料模型的 Entity Framework 實作。 副檔名是 .csdl。

(2) 存放結構定義語言 (Store schema definition language,SSDL) 會定義儲存體模型,也稱為邏輯模型。 副檔名是 .ssdl。

(3) 對應規格語言檔案 (Mapping specification language,MSL) 會定義儲存體模型和概念模型之間的對應。 副檔名是 .msl。




參考資料

實體資料模型
http://msdn.microsoft.com/zh-tw/library/ee382825.aspx

Entity Data Model
http://msdn.microsoft.com/en-us/library/ee382825.aspx

ADO.NET Entity Framework
http://msdn.microsoft.com/zh-tw/library/bb399572.aspx

Entity Framework 概觀
http://msdn.microsoft.com/zh-tw/library/bb399567.aspx

使用者入門 (Entity Framework)
http://msdn.microsoft.com/zh-tw/library/bb386876.aspx

ADO.NET Entity Framework
http://zh.wikipedia.org/zh-tw/ADO.NET_Entity_Framework

Entity Framework Design
http://blogs.msdn.com/b/efdesign/