實體框架 - 列舉支援



在實體框架中,此功能允許您在域類上定義一個列舉型別屬性,並將其對映到整型型別的資料庫列。然後,實體框架會在查詢和儲存資料時將資料庫值轉換為相關的列舉,反之亦然。

  • 當處理具有固定數量響應的屬性時,列舉型別具有各種好處。

  • 當您使用列舉時,應用程式的安全性和可靠性都會提高。

  • 列舉使使用者犯錯的可能性大大降低,並且諸如注入攻擊之類的問題根本不存在。

  • 在實體框架中,列舉可以具有以下底層型別:

    • 位元組 (Byte)
    • Int16
    • Int32
    • Int64
    • SByte
  • 列舉元素的預設底層型別為 int。

  • 預設情況下,第一個列舉器的值為 0,每個後續列舉器的值增加 1。

讓我們來看下面的示例,我們將建立一個實體並在其中新增一些屬性。

步驟 1 - 從“檔案”→“新建”→“專案”選單選項建立新專案。

步驟 2 - 在左側窗格中,選擇“控制檯應用程式”。

Creating Entity

步驟 3 - 輸入 EFEnumDemo 作為專案名稱,然後單擊“確定”。

步驟 4 - 右鍵單擊解決方案資源管理器中的專案名稱,然後選擇“新增”→“新建項”選單選項。

步驟 5 - 在“模板”窗格中選擇“ADO.NET 實體資料模型”。

Data Model Template

步驟 6 - 輸入 EFEnumModel.edmx 作為檔名,然後單擊“新增”。

步驟 7 - 在“實體資料模型嚮導”頁面上,選擇“空 EF 設計器模型”。

Model Wizard Page

步驟 8 - 單擊“完成”。

步驟 9 - 然後右鍵單擊設計器視窗,然後選擇“新增”→“實體”。

Designer Window Entity

將出現“新建實體”對話方塊,如下圖所示。

New Entity Dialog

步驟 10 - 輸入 Department 作為實體名稱,DeptID 作為屬性名稱,將屬性型別保留為 Int32,然後單擊“確定”。

步驟 11 - 右鍵單擊實體,然後選擇“新增新”→“標量屬性”。

Scalar Property

步驟 12 - 將新屬性重新命名為 DeptName。

步驟 13 - 將新屬性的型別更改為 Int32(預設情況下,新屬性的型別為字串)。

步驟 14 - 要更改型別,請開啟“屬性”視窗並將“型別”屬性更改為 Int32。

Type

步驟 15 - 在實體框架設計器中,右鍵單擊 Name 屬性,選擇“轉換為列舉”。

Entity Framework Designer

步驟 16 - 在“新增列舉型別”對話方塊中,輸入 DepartmentNames 作為列舉型別名稱,將“底層型別”更改為 Int32,然後向該型別新增以下成員:物理學、化學、計算機和經濟學。

Add Enum

步驟 17 - 單擊“確定”。

如果您切換到“模型瀏覽器”視窗,您將看到該型別也已新增到“列舉型別”節點。

Model Browser Window

讓我們按照“模型優先方法”章節中提到的所有步驟從模型生成資料庫。

步驟 1 - 右鍵單擊實體設計器介面,然後選擇“從模型生成資料庫”。

將顯示“生成資料庫嚮導”的“選擇資料連線”對話方塊。

步驟 2 - 單擊“新建連線”按鈕。

Connection Button

步驟 3 - 輸入伺服器名稱和 EnumDemo 作為資料庫名稱,然後單擊“確定”。

步驟 4 - 將彈出一個對話方塊詢問您是否要建立一個新資料庫,單擊“是”。

步驟 5 - 單擊“下一步”,建立資料庫嚮導將生成用於建立資料庫的資料定義語言 (DDL)。現在單擊“完成”。

步驟 6 - 右鍵單擊 T-SQL 編輯器,然後選擇“執行”。

TSql Editor

步驟 7 - 要檢視生成的模式,請右鍵單擊 SQL Server 物件資源管理器中的資料庫名稱,然後選擇“重新整理”。

您將在資料庫中看到 Departments 表。

Departments Table

讓我們來看下面的示例,在這個示例中,一些新的 Department 物件被新增到上下文中並儲存。然後檢索計算機系。

class Program {

   static void Main(string[] args) {

      using (var context = new EFEnumModelContainer()) {

         context.Departments.Add(new Department { DeptName = DepartmentNames.Physics});
         context.Departments.Add(new Department { DeptName = DepartmentNames.Computer});
         context.Departments.Add(new Department { DeptName = DepartmentNames.Chemistry});
         context.Departments.Add(new Department { DeptName = DepartmentNames.Economics});

         context.SaveChanges();

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

         Console.WriteLine(
            "Department ID: {0}, Department Name: {1}", 
               department.DeptID, department.DeptName
         );

         Console.ReadKey();
      }
   }
}

執行上述程式碼後,您將收到以下輸出:

Department ID: 2, Department Name: Computer

我們建議您逐步執行上述示例,以便更好地理解。

廣告
© . All rights reserved.