共用方式為


Entity Framework 簡介

實體架構 是 ADO.NET 中的一組技術,可支援資料導向軟體應用程式的開發。資料導向應用程式的架構設計人員和開發人員經常致力於滿足達成兩個迥異目標的需求。他們必須針對所解決之商務問題的實體、關聯性和邏輯建立模型,而且也必須使用用來儲存和擷取資料的資料引擎。這項資料可能會跨越多個儲存系統,而且每個系統都有自己的通訊協定 (Protocol)。即使是使用單一儲存系統的應用程式都必須在儲存系統的需求與撰寫有效率和可維護應用程式程式碼的需求之間取得平衡。

實體架構 可讓開發人員使用網域特有之物件和屬性的格式 (如客戶和客戶地址) 來處理資料,而不需要顧慮這些資料儲存在哪些基礎資料庫資料表和資料行內。您可以透過提高開發人員處理資料時可以工作的抽象層級,以及減少建立和維護資料導向應用程式所需的程式碼,啟用這項功能。由於 實體架構 是 .NET Framework 的元件,所以 實體架構 應用程式可以在已安裝 .NET Framework 3.5 Service Pack 1 (SP1) 的任何電腦上執行。

為概念模型賦予生命

傳統且常見的資料模型設計模式是將資料模型分成三個部分:概念模型、邏輯模型和實體模型。概念模型會在建立模型的系統中定義實體和關聯性。關聯式資料庫的邏輯模型會將實體和關聯性正規化成含有外部索引鍵條件約束的資料表。實體模型會透過指定儲存詳細資料 (例如資料分割和索引),處理特定資料引擎的功能。

雖然資料庫管理員會調整實體模型來改善效能,不過撰寫應用程式程式碼的程式設計人員主要會透過撰寫 SQL 查詢和呼叫預存程序 (Stored Procedure),限制他們自己使用邏輯模型。概念模型通常會當做擷取和傳達應用程式需求的工具使用,而經常當做在專案早期階段中檢視和討論,然後放棄的惰性圖表使用。許多開發小組會略過建立概念模型,而從指定關聯式資料庫中的資料表、資料行和索引鍵開始。

實體架構 為概念模型賦予生命,方法是讓開發人員在概念模型中查詢實體和關聯性,同時仰賴 實體架構 將這些作業轉譯成資料來源特有的命令。如此,應用程式便不再受限於特定資料來源的硬式編碼相依性。概念模型、儲存模型和這兩個模型之間的對應會以稱為 實體資料模型 (EDM) 的外部規格表示。儲存模型和對應可以視需要變更,而不需要對概念模型、資料類別 (Class) 或應用程式程式碼進行變更。由於儲存模型是提供者特有的,所以您可以在各種資料來源中使用一致的概念模型。

EDM 是由下列三個模型和對應檔 (具有對應的副檔名) 所定義:

  • 概念結構定義語言檔案 (.csdl) - 定義概念模型。

  • 存放結構定義語言檔案 (.ssdl) - 定義儲存模型,也稱為邏輯模型。

  • 對應規格語言檔案 (.msl) - 定義儲存和概念模型之間的對應。

實體架構 會使用這些以 XML 為基礎的模型和對應檔,將針對概念模型中實體和關聯性的建立、讀取、更新及刪除作業轉換成資料來源中的對等作業。EDM 甚至支援將概念模型中的實體對應至資料來源中的預存程序。如需詳細資訊,請參閱 Entity Framework 中的資料模型化

將物件對應至資料

物件導向程式設計會提出與資料儲存系統互動的挑戰。雖然類別的組織經常會與關聯式資料庫資料表的組織密切鏡像,但是這個符合並不完美。多個正規化資料表經常會對應到單一類別,而且會使用與資料表之間的關聯性不同的方式來表示類別之間的關聯性。例如,若要表示銷售訂單的客戶,Order 類別會使用包含 Customer 類別執行個體之參考的屬性,但是資料庫中的 Order 資料表資料列包含外部索引鍵資料行 (或一組資料行),而且其值對應至 Customer 資料表中的主索引鍵值。Customer 類別可能具有名為 Orders 的屬性,其中包含 Order 類別執行個體的集合,但是資料庫中的 Customer 資料表沒有任何可比較的資料行。

現有的方案已經嘗試只將物件導向的類別和屬性對應至關聯式資料表和資料行,藉以填補這個間距 (經常稱為「阻抗不相符」)。實體架構 會將邏輯模型中的關聯式資料表、資料行和外部索引鍵條件約束對應至概念模型中的實體和關聯性,而非採取這種傳統方法。這樣做可以在定義物件和最佳化邏輯模型方面提供更大的彈性。實體資料模型 工具會產生以概念模型為基礎的可擴充資料類別。這些類別是可以使用開發人員所加入的其他成員所擴充的部分類別。針對特定概念模型所產生的類別衍生自提供物件服務來將實體具體化為物件以及追蹤和儲存變更的基底類別 (Base Class)。開發人員可以使用這些類別,將實體和關聯性當做經由導覽屬性而相關的物件進行處理。如需物件服務的詳細資訊,請參閱物件服務概觀 (Entity Framework)

存取與變更實體資料

Entity Framework 不只是另一個物件關聯式對應方案而已,它基本上是有關如何讓應用程式存取和變更表示成概念模型中之實體和關聯性的資料。物件服務會使用 EDM,將針對在概念模型中表示之實體類型的物件查詢轉譯成資料來源特有的查詢。查詢結果會具體化為物件服務所管理的物件。實體架構 提供了下列方式來查詢 EDM 並傳回物件:

  • LINQ 到實體 - 針對查詢在概念模型中定義的實體類型提供 Language-Integrated Query (LINQ) 支援。如需詳細資訊,請參閱 LINQ to Entities 概觀

  • Entity SQL - 這是與儲存體無關的 SQL Dialect,可直接與概念模型中的實體一起運作並且支援繼承 (Inheritance) 和關聯性等 EDM 功能。實體 SQL 會與使用 EntityClient 提供者所執行的物件查詢和查詢搭配使用。如需詳細資訊,請參閱 Entity SQL 概觀

  • 查詢產生器方法 - 可讓您使用 LINQ 樣式的查詢方法來建構 實體 SQL 查詢。如需詳細資訊,請參閱查詢產生器方法 (Entity Framework)

實體架構 包含 EntityClient 資料提供者 (Data Provider)。這個提供者會管理連接、將實體查詢轉譯成資料來源特有的查詢,以及傳回物件服務用來將實體資料具體化為物件的資料讀取器。不需要物件具體化時,EntityClient 提供者也可以當做標準 ADO.NET 資料提供者使用,方法是讓應用程式執行 實體 SQL 查詢並且取用傳回的唯讀資料讀取器。如需詳細資訊,請參閱 Entity Framework 的 EntityClient 提供者

下圖說明用於處理資料的 Entity Framework 架構:

Entity Framework 架構圖表

實體架構 會產生衍生自 ObjectContext (代表概念模型中的實體容器) 的類別。這個物件內容會提供追蹤變更以及管理識別 (Identity)、並行和關聯性的機能。這個類別也會公開 (Expose) 可針對資料來源進行寫入、插入、更新和刪除作業的 SaveChanges 方法。就像查詢一樣,這些變更是由系統自動產生的命令所進行,或由開發人員指定的預存程序所進行。如需詳細資訊,請參閱加入、修改和刪除物件 (Entity Framework)

Entity Data Model 工具

.NET Framework 3.5 SP1 與 實體架構 執行階段一起包含 EDM 產生器 (EdmGen.exe)。這個命令提示字元公用程式會連接至資料來源,並且根據實體與資料表之間的一對一對應產生 EDM。它也會使用概念模型檔案 (.csdl) 來產生物件層檔案,其中包含代表實體類型的類別和 ObjectContext。如需詳細資訊,請參閱 EDM 產生器 (EdmGen.exe)

Visual Studio 2008 針對產生和維護 Visual Studio 應用程式中的 EDM 包含豐富的工具支援。實體資料模型 Designer 支援建立進階的對應案例,例如每個類型的資料表和每個階層的資料表繼承以及對應至多個資料表的分割實體。如需詳細資訊,請參閱 ADO.NET 實體資料模型設計工具概觀

了解詳細資訊

下列主題可讓您了解 實體架構 的詳細資訊:

  • 快速入門 (Entity Framework)
    示範如何使用 實體資料模型 工具搭配 Visual Studio 2008 來快速建立您的第一個 實體架構 應用程式。
  • 應用程式案例 (Entity Framework)
    提供符合特定應用程式案例之主題的工作式連結,例如撰寫查詢、將物件繫結至資料控制項,或實作商務邏輯。
  • Entity Framework 功能
    提供構成 實體架構 之功能的詳細資訊以及討論這些功能之主題的連結。
  • Entity Framework 詞彙
    定義 EDM 和 實體架構 所導入以及 實體架構 文件所使用的許多詞彙。
  • Entity Framework 資源
    提供概念性主題的連結以及建置 (Build) 實體架構 應用程式之外部主題和資源的連結。

另請參閱

其他資源

ADO.NET Entity Framework