列舉支援 - 程式碼優先
注意
僅限 EF5 及更新版本 - 在 Entity Framework 5 中已介紹此頁面所討論的功能、API 等。 如果您使用的是較早版本,則不適用部分或全部的資訊。
這段影片和逐步解說示範如何搭配 Entity Framework Code First 使用列舉類型。 它也示範如何在 LINQ 查詢中使用列舉。
本逐步解說將使用 Code First 來建立新的資料庫,但您也可以使用 Code First 對應至現有的資料庫 。
Entity Framework 5 引進列舉支援。 若要使用列舉、空間資料類型和資料表值函式等新功能,您必須以 .NET Framework 4.5 為目標。 Visual Studio 2012 預設會以 .NET 4.5 為目標。
在 Entity Framework 中,列舉可以有下列基礎類型:Byte、Int16 、Int32 、 Int64 或 SByte 。
觀賞影片
這段影片示範如何搭配 Entity Framework Code First 使用列舉類型。 它也示範如何在 LINQ 查詢中使用列舉。
呈現者 :朱麗亞·科尼奇
必要條件
您必須安裝 Visual Studio 2012、Ultimate、進階版、Professional 或 Web Express 版本,才能完成本逐步解說。
設定專案
- 開啟 Visual Studio 2012
- 在 [ 檔案] 功能表上,指向 [ 新增 ],然後按一下 [ 專案]
- 在左窗格中,按一下 [Visual C# ],然後選取 主控台 範本
- 輸入 EnumCodeFirst 作為專案的名稱,然後按一下 [ 確定]
使用 Code First 定義新的模型
使用 Code First 開發時,您通常會從撰寫定義概念(領域)模型的 .NET Framework 類別開始。 下列程式碼會定義 Department 類別。
程式碼也會定義 DepartmentNames 列舉。 根據預設,列舉型別為 int 類型。 Department 類別的 Name 屬性屬於 DepartmentNames 類型。
開啟 Program.cs 檔案,並貼上下列類別定義。
public enum DepartmentNames
{
English,
Math,
Economics
}
public partial class Department
{
public int DepartmentID { get; set; }
public DepartmentNames Name { get; set; }
public decimal Budget { get; set; }
}
定義 DbCoNtext 衍生類型
除了定義實體之外,您還需要定義衍生自 DbCoNtext 的類別,並公開 DbSet < TEntity > 屬性。 DbSet < TEntity > 屬性可讓內容知道您要包含在模型中的類型。
DbCoNtext 衍生型別的實例會在運行時間管理實體物件,其中包括將來自資料庫的資料填入物件、變更追蹤,以及將資料保存至資料庫。
DbCoNtext 和 DbSet 類型定義于 EntityFramework 元件中。 我們將使用 EntityFramework NuGet 套件來新增此 DLL 的參考。
- 在方案總管中,以滑鼠右鍵按一下專案名稱。
- 選取 [ 管理 NuGet 套件...
- 在 [管理 NuGet 套件] 對話方塊中,選取 [ 線上 ] 索引標籤,然後選擇 EntityFramework 套件。
- 按一下 [安裝]
請注意,除了 EntityFramework 元件之外,也會新增 System.ComponentModel.DataAnnotations 和 System.Data.Entity 元件的參考。
在 Program.cs 檔案頂端,新增下列 using 語句:
using System.Data.Entity;
在 Program.cs 中新增內容定義。
public partial class EnumTestContext : DbContext
{
public DbSet<Department> Departments { get; set; }
}
保存和擷取資料
開啟定義 Main 方法的 Program.cs 檔案。 將下列程式碼新增至 Main 函式。 程式碼會將新的 Department 物件新增至內容。 然後儲存資料。 此程式碼也會執行 LINQ 查詢,此查詢會傳回名稱為 DepartmentNames.English 的 Department。
using (var context = new EnumTestContext())
{
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} Name: {1}",
department.DepartmentID,
department.Name);
}
編譯並執行應用程式。 此程式會產生下列輸出:
DepartmentID: 1 Name: English
檢視產生的資料庫
當您第一次執行應用程式時,Entity Framework 會為您建立資料庫。 因為我們已安裝 Visual Studio 2012,因此會在 LocalDB 實例上建立資料庫。 根據預設,Entity Framework 會將資料庫命名為衍生內容的完整名稱之後(在此範例中為 EnumCodeFirst.EnumTestCoNtext )。 將使用現有資料庫的後續時間。
請注意,如果您在建立資料庫之後對模型進行任何變更,您應該使用Code First 移轉來更新資料庫架構。 如需使用移轉的範例,請參閱 Code First to a New Database 。
若要檢視資料庫和資料,請執行下列動作:
- 在 Visual Studio 2012 主功能表中,選取 [檢視 - > SQL Server 物件總管 ]。
- 如果 LocalDB 不在伺服器清單中,請按一下 SQL Server 上的 滑鼠右鍵,然後選取 [ 新增 SQL Server 使用預設 Windows 驗證 連線到 LocalDB 實例]
- 展開 LocalDB 節點
- 展開 Databases 資料夾以查看新的資料庫,並流覽至 Department 資料表 注意,Code First 不會建立對應至 列舉類型的資料表
- 若要檢視資料,請以滑鼠右鍵按一下資料表,然後選取 [ 檢視資料]
摘要
在本逐步解說中,我們探討如何搭配 Entity Framework Code First 使用列舉類型。