📜  Entity Framework-枚举支持

📅  最后修改于: 2020-11-21 07:24:16             🧑  作者: Mango


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

  • 枚举类型在处理具有固定数量响应的属性时具有各种好处。

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

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

  • 在实体框架中,枚举可以具有以下基础类型-

    • 字节
    • 16位
    • 32位
    • 整数64
    • 字节数
  • 枚举元素的默认基础类型为int。

  • 默认情况下,第一个枚举数的值为0,并且每个连续的枚举数的值增加1。

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

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

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

创建实体

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

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

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

数据模型模板

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

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

模型向导页面

步骤8-单击完成

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

设计器窗口实体

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

新实体对话框

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

步骤11-右键单击实体,然后选择添加新→标量属性。

标量属性

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

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

步骤14-要更改类型,请打开“属性”窗口,然后将“类型”属性更改为Int32。

类型

步骤15-在实体框架设计器中,右键单击名称属性,选择转换为枚举。

实体框架设计器

步骤16-在“添加枚举类型”对话框中,为“枚举类型名称”输入DepartmentNames,将基础类型更改为Int32,然后将以下成员添加到该类型:物理,化学,计算机和经济学。

添加枚举

步骤17-单击确定。

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

模型浏览器窗口

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

步骤1-右键单击实体设计器表面,然后选择“从模型生成数据库”。

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

步骤2-单击“新建连接”按钮。

连接按钮

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

步骤4-将弹出询问您是否要创建新数据库的对话框,单击“是”。

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

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

TSql编辑器

步骤7-要查看生成的架构,请在SQL Server Object Explorer中右键单击数据库名称,然后选择Refresh。

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

部门表

让我们看下面的示例,其中向上下文中添加并保存了一些新的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

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