列舉支援 - EF 設計工具

注意

僅限 EF5 及更新版本 - 在 Entity Framework 5 中已介紹此頁面所討論的功能、API 等。 如果您使用的是較早版本,則不適用部分或全部的資訊。

這段影片和逐步解說示範如何搭配 Entity Framework Designer 使用列舉類型。 它也示範如何在 LINQ 查詢中使用列舉。

本逐步解說會使用 Model First 來建立新的資料庫,但 EF 設計工具也可以與 Database First 工作流程搭配 使用,以對應至現有的資料庫。

Entity Framework 5 引進列舉支援。 若要使用列舉、空間資料類型和資料表值函式等新功能,您必須以 .NET Framework 4.5 為目標。 Visual Studio 2012 預設會以 .NET 4.5 為目標。

在 Entity Framework 中,列舉可以有下列基礎類型:Byte、Int16 、Int32 Int64 SByte

觀賞影片

這段影片示範如何搭配 Entity Framework Designer 使用列舉類型。 它也示範如何在 LINQ 查詢中使用列舉。

呈現者 :朱麗亞·科尼奇

影片 WMV | MP4 | WMV (ZIP)

必要條件

您必須安裝 Visual Studio 2012、Ultimate、進階版、Professional 或 Web Express 版本,才能完成本逐步解說。

設定專案

  1. 開啟 Visual Studio 2012
  2. 在 [ 檔案] 功能表上,指向 [ 新增 ],然後按一下 [ 專案]
  3. 在左窗格中,按一下 [Visual C# ],然後選取 主控台 範本
  4. 輸入 EnumEFDesigner 作為專案的名稱,然後按一下 [ 確定]

使用 EF 設計工具建立新的模型

  1. 以滑鼠右鍵按一下方案總管中的專案名稱,指向 [ 新增 ],然後按一下 [ 新增專案]
  2. 從左側功能表中選取 [資料 ],然後在 [範本] 窗格中選取 [ADO.NET 實體資料模型 ]
  3. 輸入 EnumTestModel.edmx 以取得檔案名,然後按一下 [ 新增]
  4. 在 [實體資料模型精靈] 頁面上,選取 [選擇模型內容] 對話方塊中的 [空白模型 ]
  5. 按一下 [ 完成]

[實體設計工具] 會顯示為編輯模型提供設計介面。

精靈會執行下列動作:

  • 產生 EnumTestModel.edmx 檔案,該檔案會定義概念模型、儲存模型,以及它們之間的對應。 將 .edmx 檔案的中繼資料成品處理屬性設定為內嵌在輸出元件中,讓產生的中繼資料檔案內嵌到元件中。
  • 新增下列元件的參考:EntityFramework、System.ComponentModel.DataAnnotations 和 System.Data.Entity。
  • 建立 EnumTestModel.tt 和 EnumTestModel.CoNtext.tt 檔案,並將其新增至 .edmx 檔案底下。 這些 T4 範本檔案會產生程式碼,以定義對應至 .edmx 模型中實體的 DbCoNtext 衍生類型和 POCO 類型。

新增實體類型

  1. 以滑鼠右鍵按一下設計介面的空白區域,選取 [新增 - > 實體 ],[新增實體] 對話方塊隨即出現
  2. 指定 類型名稱的 Department ,並為索引鍵屬性名稱指定 DepartmentID ,將類型保留為 Int32
  3. 按一下 [檔案] > [新增] > [專案]
  4. 以滑鼠右鍵按一下實體,然後選取 [新增 - > 純量屬性]
  5. 將新屬性重新命名為 Name
  6. 將新屬性的類型變更為 Int32 (根據預設,新屬性為 String 類型)若要變更類型,請開啟屬性視窗,並將 Type 屬性變更為 Int32
  7. 新增另一個純量屬性並將它重新命名為 Budget ,將類型變更為 Decimal

新增列舉類型

  1. 在 Entity Framework 設計工具中,以滑鼠右鍵按一下 [名稱] 屬性,選取 [ 轉換為列舉]

    Convert To Enum

  2. 在 [ 新增列舉] 對話方塊中,輸入 DepartmentNames for the Enum Type Name,將 [基礎類型] 變更為 Int32 ,然後將下列成員新增至類型:English、Math 和 Economics

    Add Enum Type

  3. [確定]

  4. 儲存模型並建置專案

    注意

    當您建置時,有關未對應的實體和關聯警告可能會出現在錯誤清單中。 您可以忽略這些警告,因為我們選擇從模型產生資料庫之後,錯誤將會消失。

如果您查看屬性視窗,您會發現 Name 屬性的類型已變更為 DepartmentNames, 而且新新增的列舉類型已新增至類型清單。

如果您切換至 [模型瀏覽器] 視窗,您會看到類型也已新增至 [列舉類型] 節點。

Model Browser

注意

您也可以按一下滑鼠右鍵,然後選取 [新增列舉類型],從這個視窗新增列舉類型 。 建立類型之後,它會出現在類型清單中,而且您可以與屬性產生關聯

從模型產生資料庫

現在我們可以產生以模型為基礎的資料庫。

  1. 以滑鼠右鍵按一下實體設計工具介面上的空白空間,然後從模型選取 [ 產生資料庫]
  2. [產生資料庫精靈] 的 [選擇您的資料連線] 對話方塊隨即顯示,按一下 [新增連線ion ] 按鈕 [指定伺服器名稱] 和 [EnumTest ] 為資料庫指定 (localdb)\mssqllocaldb ,然後按一下 [ 確定]
  3. 詢問您是否要建立新資料庫的對話方塊隨即出現,按一下 [ ]。
  4. [下一步 ],[建立資料庫精靈] 會產生資料定義語言 (DDL)來建立資料庫。產生的 DDL 會顯示在 [摘要] 和 [設定對話方塊附注] 中,指出 DDL 不包含對應至列舉型別之資料表的定義
  5. 按一下 [ 完成 ] 按一下 [完成] 不會執行 DDL 腳本。
  6. [建立資料庫精靈] 會執行下列動作:在 T-SQL 編輯器中開啟 EnumTest.edmx.sql 產生 EDMX 檔案的存放區架構和對應區段:將連接字串資訊新增至 App.config 檔案
  7. 按一下 T-SQL 編輯器中的滑鼠右鍵,然後選取 [執行 伺服器連線] 對話方塊,輸入步驟 2 中的連線資訊,然後按一下 [連線
  8. 若要檢視產生的架構,請以滑鼠右鍵按一下 SQL Server 中的資料庫名稱物件總管,然後選取 [ 重新整理]

保存和擷取資料

開啟定義 Main 方法的 Program.cs 檔案。 將下列程式碼新增至 Main 函式。 程式碼會將新的 Department 物件新增至內容。 然後儲存資料。 此程式碼也會執行 LINQ 查詢,此查詢會傳回名稱為 DepartmentNames.English 的 Department。

using (var context = new EnumTestModelContainer())
{
    context.Departments.Add(new Department{ Name = DepartmentNames.English });

    context.SaveChanges();

    var department = (from d in context.Departments
                        where d.Name == DepartmentNames.English
                        select d).FirstOrDefault();

    Console.WriteLine(
        "DepartmentID: {0} and Name: {1}",
        department.DepartmentID,  
        department.Name);
}

編譯並執行應用程式。 此程式會產生下列輸出:

DepartmentID: 1 Name: English

若要檢視資料庫中的資料,請以滑鼠右鍵按一下 SQL Server 中的資料庫名稱物件總管,然後選取 [ 重新整理 ]。 然後,按一下資料表上的滑鼠右鍵,然後選取 [ 檢視資料 ]。

摘要

在本逐步解說中,我們已瞭解如何使用 Entity Framework Designer 對應列舉類型,以及如何在程式碼中使用列舉。