实体框架 - 枚举支持

在 Entity Framework 中,此功能允许您在域类上定义枚举类型的属性,并将其映射到整数类型的数据库列。然后,Entity Framework 将在查询和保存数据时将数据库值转换为相关枚举或从相关枚举转换为数据库值。

  • 使用具有固定数量响应的属性时,枚举类型具有各种优势。

  • 使用枚举时,应用程序的安全性和可靠性都会提高。

  • 枚举使用户更难犯错,并且不存在诸如注入攻击之类的问题。

  • 在 Entity Framework 中,枚举可以具有以下基础类型 −

    • Byte
    • Int16
    • Int32
    • Int64
    • SByte
  • 枚举元素的默认基础类型是 int。

  • 默认情况下,第一个枚举器的值为 0,每个后续枚举器的值都会增加 1。

让我们看下面的示例,我们将在设计器中创建一个实体,然后添加一些属性。

步骤 1 − 从文件 → 新建 → 项目菜单选项创建新项目。

步骤 2 − 在左侧窗格中,选择控制台应用程序。

创建实体

步骤 3 −输入 EFEnumDemo 作为项目名称,然后单击"确定"。

步骤 4 − 在解决方案资源管理器中右键单击项目名称,然后选择"添加"—"新项"菜单选项。

步骤 5 − 在"模板"窗格中选择"ADO.NET 实体数据模型"。

数据模型模板

步骤 6 − 输入 EFEnumModel.edmx 作为文件名,然后单击"添加"。

步骤 7 − 在"实体数据模型向导"页面上,选择"空 EF 设计器模型"。

模型向导页面

步骤 8 − 单击"完成"

步骤 9 − 然后右键单击设计器窗口并选择"添加→ 实体"。

设计器窗口实体

出现"新建实体"对话框,如下图所示。

新建实体对话框

步骤 10 − 输入 Department 作为实体名称,DeptID 作为属性名称,将属性类型保留为 Int32,然后单击"确定"。

步骤 11 − 右键单击​​实体并选择"添加新→标量属性。

标量属性

步骤 12 − 将新属性重命名为 DeptName。

步骤 13 − 将新属性的类型更改为 Int32(默认情况下,新属性为 String 类型)。

步骤 14 − 要更改类型,请打开"属性"窗口并将"类型"属性更改为 Int32。

类型

步骤 15 −在 Entity Framework Designer 中,右键单击 Name 属性,选择 Convert to enum。

Entity Framework Designer

步骤 16 − 在 Add Enum Type 对话框中,输入 DepartmentNames 作为 Enum Type Name,将 Underlying Type 更改为 Int32,然后向该类型添加以下成员:Physics、Chemistry、Computer 和 Economics。

Add Enum

步骤 17 −单击"确定"。

如果切换到"模型浏览器"窗口,您将看到该类型也已添加到"枚举类型"节点。

模型浏览器窗口

让我们按照"模型优先方法"一章中提到的所有步骤从模型生成数据库。

步骤 1 − 右键单击​​实体设计器表面并选择从模型生成数据库。

显示生成数据库向导的选择数据连接对话框。

步骤 2 − 单击新建连接按钮。

连接按钮

步骤 3 −输入数据库的服务器名称和 EnumDemo,然后单击"确定"。

步骤 4 − 将弹出一个对话框询问您是否要创建新数据库,单击"是"。

步骤 5 − 单击"下一步",创建数据库向导将生成用于创建数据库的数据定义语言 (DDL)。现在单击"完成"。

步骤 6 − 右键单击​​"T-SQL 编辑器",然后选择"执行"。

TSql 编辑器

步骤 7 −要查看生成的架构,请在 SQL Server 对象资源管理器中右键单击数据库名称,然后选择"刷新"。

您将在数据库中看到 Departments 表。

Departments Table

让我们看一下以下示例,其中向上下文添加并保存了一些新的 Department 对象。然后检索 Computer 部门。

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

我们建议您逐步执行上述示例,以便更好地理解。