Enum 支援 - EF 設計器

備註

僅限 EF5 及以後 - 本頁討論的功能、API 等皆於 Entity Framework 5 中引入。 如果你使用的是較早期版本,部分或全部資訊可能不適用。

這支影片與逐步教學展示了如何在實體框架設計器中使用枚舉型別。 它也示範如何在 LINQ 查詢中使用枚舉。

本導覽將使用 Model First 建立新資料庫,但 EF Designer 也可以搭配 Database First 工作流程對應至現有資料庫。

Enum 支援是在 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、Premium、Professional,或 Web Express 版本才能完成此攻略。

設立專案

  1. Open Visual Studio 2012
  2. 在 檔案 選單中,指向 「新建」,然後點 選專案
  3. 在左側窗格點選 Visual C#,然後選擇 Console 範本
  4. 輸入 EnumEFDesigner 作為專案名稱並點 選確定

使用 EF Designer 建立新模型

  1. 在解決方案總管中右鍵點擊專案名稱,指向 新增,然後點選 新項目
  2. 從左側選單選擇資料,然後在範本窗格中選擇ADO.NET 實體資料模型
  3. 輸入 EnumTestModel.edmx 作為檔名,然後點 選新增
  4. 在實體資料模型精靈頁面,選擇「選擇模型內容」對話框中的 「空模型 」
  5. 按一下 [完成]

實體設計器(Entity Designer)會顯示用於編輯模型的設計表面。

精靈執行以下動作:

  • 產生定義概念模型、儲存模型及其間映射的 EnumTestModel.edmx 檔案。 將 .edmx 檔案的 Metadata Artifact Processing 屬性設為嵌入 Output Assembly,讓產生的 metadata 檔案嵌入 assembly 中。
  • 新增以下組件的參考:EntityFramework、System.ComponentModel.DataAnnotations 及 System.Data.Entity。
  • 建立 EnumTestModel.tt 和 EnumTestModel.Context.tt 檔案,並將它們加到.edmx檔底下。 這些 T4 範本檔案產生定義 DbContext 衍生型別及 POCO 型別的程式碼,這些類型對應到 .edmx 模型中的實體。

新增實體類型

  1. 右鍵點擊設計表面的空白區域,選擇 新增 -> 實體,就會出現新實體對話框
  2. 將 Department 指定為類型名稱,並指定 DepartmentID 作為關鍵屬性名稱,類型則保留為 Int32
  3. 按一下確定
  4. 右鍵點選實體並選擇 新增 -> 標量屬性
  5. 將新屬性更名為 Name
  6. 將新屬性的型別改為 Int32 (預設為 String 型別)。要更改型別,打開屬性視窗並將型態屬性改為 Int32
  7. 新增另一個標量屬性並改名為 Budget,並將類型改為 Decimal

新增一個列舉型別

  1. 在實體框架設計器中,右鍵點擊名稱屬性,選擇「轉換成枚舉」

    轉為列舉

  2. 在 「新增列舉 」對話框中,輸入 DepartmentNames 作為列舉類型名稱,將底層類型改為 Int32,然後新增以下成員:英語、數學與經濟學

    新增列舉型別

  3. 按下確定鍵

  4. 儲存模型並建立專案

    備註

    當你建置時,錯誤清單中可能會顯示關於未映射實體和關聯的警告。 你可以忽略這些警告,因為當我們選擇從模型產生資料庫後,錯誤就會消失。

如果你查看屬性視窗,你會注意到名稱屬性的類型被改為 DepartmentNames ,並且新增的列舉類型也加入了類型清單。

如果您切換到模型瀏覽器視窗,您會看到該類型也被加入了列舉類型節點。

模型瀏覽器

備註

你也可以在這個視窗中點擊滑鼠右鍵並選擇 「新增列舉類型」來新增列舉型別。 一旦建立型態,它會出現在類型列表中,你就能與某個屬性產生關聯

從模型產生資料庫

現在我們可以根據模型產生一個資料庫。

  1. 在實體設計器表面右鍵點擊一個空白區域,選擇 從模型產生資料庫
  2. 產生資料庫精靈的「選擇您的資料連線」對話框會顯示:點擊 新連線 按鈕,指定伺服器名稱為 (localdb)\mssqllocaldb ,資料庫為 EnumTest ,然後點擊 確定
  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 函式。 程式碼會在上下文中新增一個部門物件。 然後它會儲存資料。 程式碼也會執行一個 LINQ 查詢,回傳一個名稱為 DepartmentNames.English 的部門。

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 映射 enum 類型,以及如何在程式碼中使用 enum。