產生的程式碼概觀 (實體資料模型設計工具)

ADO.NET Entity Framework 所提供的工具,可根據 .edmx 檔案之概念結構定義語言 (CSDL) 的內容來自動產生物件層。 根據預設,ADO.NET 實體資料模型設計工具 (Entity Designer) 使用的 EntityModelCodeGenerator 自訂工具能產生物件層程式碼。 如需自訂工具的詳細資訊,請參閱實作單一檔案產生器 (英文)。 您也可以使用 EdmGen.exe 命令列工具。 如需詳細資訊,請參閱 How to: Use EdmGen.exe to Generate Object Model Files。 EntityModelCodeGenerator 和 EdmGen.exe 命令列工具會使用 EntityClassGenerator 類別來產生原始程式碼。

Entity Designer 也可以使用文字範本來產生自訂的物件層程式碼。 如需詳細資訊,請參閱 HOW TO:產生自訂物件層程式碼 (實體資料模型設計工具)

產生物件層程式碼

有幾種方式可以觸發用來產生物件層程式碼的預設自訂工具:

  • 使用 ADO.NET 實體資料模型精靈。 如需詳細資訊,請參閱Entity Data Model 精靈

  • 使用「更新模型精靈」。 如需詳細資訊,請參閱更新模型精靈

  • 執行在 Custom Tool .edmx 檔案屬性中所指定的工具。 在 [方案總管] 中以滑鼠右鍵按一下某個 .edmx 檔案,並選取 [執行自訂工具]。 如需 .edmx 檔案屬性的詳細資訊,請參閱 .edmx 檔案概觀 (Entity Framework)

  • 儲存 .edmx 檔案。

  • 離開已變更的 .edmx 檔案。 請注意,這也包含離開 Entity Designer 開啟的已變更 .edmx 檔案。

  • 建置一個含有已變更之 .edmx 檔案的專案。

    Cc982041.note(zh-tw,VS.100).gif注意:
    上述選項利用下列名稱產生或覆寫一個 Visual Basic 或 C# 原始程式碼檔案:< model name>.Designer.vb 或 < model name>.Designer.cs。該檔案會加入至 [方案總管] 中的 .edmx 節點。

  • 使用 EdmGen.exe 命令列工具。 使用 EdmGen.exe 工具會產生已在命令列中指定之名稱和位置的 Visual Basic 或 C# 原始程式碼檔案。

Cc982041.note(zh-tw,VS.100).gif注意:
當預設自訂工具或 EdmGen.exe 工具產生物件層程式碼時,會覆寫現有的物件層程式碼。如需如何避免自訂覆寫到物件層程式碼的詳細資訊,請參閱 How to: Customize Generated Data Objects

Cc982041.note(zh-tw,VS.100).gif注意:
根據概念模型中之函式匯入所產生的方法會搭配 ExecuteFunction 方法執行對應預存程序。如果您要使用不接受合併選項參數的多載,就會使用 AppendOnly 選項。

Cc982041.note(zh-tw,VS.100).gif注意:
從 Visual Studio 2010 開始,程式碼產生器會將 ObjectContextLazyLoadingEnabled 屬性 (Property) 設定為概念模型中定義之 annotation:LazyLoadingEnabled 附註屬性 (Attribute) 的值。根據預設,annotation:LazyLoadingEnabled 值會設定為 true

判斷產生之程式碼的命名空間

根據預設,產生之程式碼的命名空間就是專案之應用程式頁面中指定的命名空間。 不過,如果您在 .edmx 檔案的 [Custom Tool Namespace] 屬性中指定命名空間,就會使用指定的命名空間。

根據專案類型,您可能要套用某些其他考量,例如:

  • Visual Basic 專案:如果您沒有針對 [Custom Tool Namespace] 屬性設定任何值,而且專案有一個空白命名空間,則產生之程式碼的命名空間就是在 .edmx 檔案中指定的概念模型命名空間。 如需詳細資訊,請參閱判斷預設命名空間 (英文)。 如果您指定了自訂工具命名空間,Visual Studio 編譯器就會在您所指定的名稱前面加上專案的根命名空間。 即使這些類型定義於指定的命名空間中,當您宣告這些類型時,仍然必須匯入 defaultnamespace.specifiednamespace。 例如,如果專案的根命名空間是 ProjectDefaultNamespace,而且您在 [自訂工具命名空間] 屬性中指定了 TestNamespace,則當您宣告 TestNamespace 命名空間中定義的類型時,就必須使用:Import ProjectDefaultNamespace.TestNamespace

  • C# 專案:如果尚未針對 [Custom Tool Namespace] 屬性指定任何命名空間,則產生之程式碼的命名空間就是該專案的預設命名空間 (如專案的應用程式頁面所指定) 加上 .edmx 檔案所在位置的資料夾路徑。 例如,若相對於專案根目錄的 .edmx 檔案路徑是 Folder1/Folder2/Model.edmx,產生之程式碼的命名空間為 ProjectDefaultNamespace.Folder1.Folder2。

  • 在 ASP.NET 網站專案中,若 .edmx 檔案是在 App_Code 資料夾的根目錄中,產生之程式碼的命名空間為在 .edmx 檔案的 CSDL 內容中定義的概念模型命名空間 (如需詳細資訊,請參閱 Schema Element (CSDL))。 若 .edmx 檔案是在 App_Code 資料夾的子資料夾中,產生之程式碼的命名空間則為相對於 App_Code 資料夾的資料夾路徑。 例如,如果 .edmx 檔案位於 App_Code/Folder1/Folder2,則產生之程式碼的命名空間就是 Folder1.Folder2。

在專案中使用多個 .edmx 檔案

當一個專案包含多個 .edmx 檔案 (以含有通用資料表名稱的資料庫為基礎) 時,產生的程式碼就可能會包含衝突的類別名稱。 在何種狀況下會產生衝突,以及如何解決衝突,需視專案類型而定,如下所示:

  • 在 C# 專案中,若多個根據具有通用資料表名稱資料庫的 .edmx 檔案出現在相同的專案資料夾中,衝突類別名稱會在產生的程式碼中出現。 若要解決衝突,請針對每個 .edmx 檔案的 Custom Tool Namespace 屬性指定唯一的值,或將每個 .edmx 檔案放在專案的不同子資料夾中。

  • 在 Visual Basic 專案中,若多個根據具有通用資料表名稱資料庫的 .edmx 檔案出現在專案的任何地方,衝突類別名稱會在產生的程式碼中出現。 若要解決衝突,請針對每個 .edmx 檔案的 Custom Tool Namespace 屬性指定唯一的值。

  • 在 ASP.NET 網站專案中,若多個根據具有通用資料表名稱之資料庫的 .edmx 檔案在 App_Code 資料夾或在 App_Code 目錄的相同子資料夾中,衝突類別名稱會在產生的程式碼中出現。 若要解決衝突,請將每個 .edmx 檔案放在 App_Code 目錄的不同子資料夾中。

請注意,每個案例的解決方法會變更每個 .edmx 檔案產生之程式碼的命名空間,且可能需要更新使用產生類別之現有應用程式的程式碼。

擴充部分類別

實體資料模型工具產生資料類別時,會在部分類別中實作資料類別。 您可以擴充產生的部分資料類別,以便在物件中加入功能。 具有部分類別可讓您使用個別原始程式檔中的自訂方法和屬性來擴充這些類別,而不需要擔心在重新整理產生的檔案時,遺失自訂內容。 如需詳細資訊,請參閱 How to: Customize Generated Data Objects

本章節內容

另請參閱

概念

.edmx 檔案概觀 (Entity Framework)