列舉支援 - 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 查詢中使用列舉。
呈現者 :朱麗亞·科尼奇
必要條件
您必須安裝 Visual Studio 2012、Ultimate、進階版、Professional 或 Web Express 版本,才能完成本逐步解說。
設定專案
- 開啟 Visual Studio 2012
- 在 [ 檔案] 功能表上,指向 [ 新增 ],然後按一下 [ 專案]
- 在左窗格中,按一下 [Visual C# ],然後選取 主控台 範本
- 輸入 EnumEFDesigner 作為專案的名稱,然後按一下 [ 確定]
使用 EF 設計工具建立新的模型
- 以滑鼠右鍵按一下方案總管中的專案名稱,指向 [ 新增 ],然後按一下 [ 新增專案]
- 從左側功能表中選取 [資料 ],然後在 [範本] 窗格中選取 [ADO.NET 實體資料模型 ]
- 輸入 EnumTestModel.edmx 以取得檔案名,然後按一下 [ 新增]
- 在 [實體資料模型精靈] 頁面上,選取 [選擇模型內容] 對話方塊中的 [空白模型 ]
- 按一下 [ 完成]
[實體設計工具] 會顯示為編輯模型提供設計介面。
精靈會執行下列動作:
- 產生 EnumTestModel.edmx 檔案,該檔案會定義概念模型、儲存模型,以及它們之間的對應。 將 .edmx 檔案的中繼資料成品處理屬性設定為內嵌在輸出元件中,讓產生的中繼資料檔案內嵌到元件中。
- 新增下列元件的參考:EntityFramework、System.ComponentModel.DataAnnotations 和 System.Data.Entity。
- 建立 EnumTestModel.tt 和 EnumTestModel.CoNtext.tt 檔案,並將其新增至 .edmx 檔案底下。 這些 T4 範本檔案會產生程式碼,以定義對應至 .edmx 模型中實體的 DbCoNtext 衍生類型和 POCO 類型。
新增實體類型
- 以滑鼠右鍵按一下設計介面的空白區域,選取 [新增 - > 實體 ],[新增實體] 對話方塊隨即出現
- 指定 類型名稱的 Department ,並為索引鍵屬性名稱指定 DepartmentID ,將類型保留為 Int32
- 按一下 [檔案] > [新增] > [專案]
- 以滑鼠右鍵按一下實體,然後選取 [新增 - > 純量屬性]
- 將新屬性重新命名為 Name
- 將新屬性的類型變更為 Int32 (根據預設,新屬性為 String 類型)若要變更類型,請開啟屬性視窗,並將 Type 屬性變更為 Int32
- 新增另一個純量屬性並將它重新命名為 Budget ,將類型變更為 Decimal
新增列舉類型
在 Entity Framework 設計工具中,以滑鼠右鍵按一下 [名稱] 屬性,選取 [ 轉換為列舉]
在 [ 新增列舉] 對話方塊中,輸入 DepartmentNames for the Enum Type Name,將 [基礎類型] 變更為 Int32 ,然後將下列成員新增至類型:English、Math 和 Economics
按 [確定]
儲存模型並建置專案
注意
當您建置時,有關未對應的實體和關聯警告可能會出現在錯誤清單中。 您可以忽略這些警告,因為我們選擇從模型產生資料庫之後,錯誤將會消失。
如果您查看屬性視窗,您會發現 Name 屬性的類型已變更為 DepartmentNames, 而且新新增的列舉類型已新增至類型清單。
如果您切換至 [模型瀏覽器] 視窗,您會看到類型也已新增至 [列舉類型] 節點。
注意
您也可以按一下滑鼠右鍵,然後選取 [新增列舉類型],從這個視窗新增列舉類型 。 建立類型之後,它會出現在類型清單中,而且您可以與屬性產生關聯
從模型產生資料庫
現在我們可以產生以模型為基礎的資料庫。
- 以滑鼠右鍵按一下實體設計工具介面上的空白空間,然後從模型選取 [ 產生資料庫]
- [產生資料庫精靈] 的 [選擇您的資料連線] 對話方塊隨即顯示,按一下 [新增連線ion ] 按鈕 [指定伺服器名稱] 和 [EnumTest ] 為資料庫指定 (localdb)\mssqllocaldb ,然後按一下 [ 確定]
- 詢問您是否要建立新資料庫的對話方塊隨即出現,按一下 [ 是 ]。
- 按 [下一步 ],[建立資料庫精靈] 會產生資料定義語言 (DDL)來建立資料庫。產生的 DDL 會顯示在 [摘要] 和 [設定對話方塊附注] 中,指出 DDL 不包含對應至列舉型別之資料表的定義
- 按一下 [ 完成 ] 按一下 [完成] 不會執行 DDL 腳本。
- [建立資料庫精靈] 會執行下列動作:在 T-SQL 編輯器中開啟 EnumTest.edmx.sql 產生 EDMX 檔案的存放區架構和對應區段:將連接字串資訊新增至 App.config 檔案
- 按一下 T-SQL 編輯器中的滑鼠右鍵,然後選取 [執行 伺服器連線] 對話方塊,輸入步驟 2 中的連線資訊,然後按一下 [連線
- 若要檢視產生的架構,請以滑鼠右鍵按一下 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 對應列舉類型,以及如何在程式碼中使用列舉。