开发手册 欢迎您!
软件开发者资料库

Entity Framework - 枚举支持

Entity Framework枚举支持 - 从概述,体系结构,环境设置,数据库设置,数据模型,DbContext,类型,关系,生命周期,代码优先方法,模型优先方法,数据库优先方法,DEV方法,数据库操作,并发开始学习实体框架,事务,视图,索引,存储过程,断开连接的实体,表值函数,本机SQL,枚举支持,异步查询,持久性,投影查询,命令记录,命令拦截,空间数据类型,继承,迁移,渴望,懒惰,显式加载,验证,跟踪更改,彩色实体,第一个示例,数据注释,Fluent API,种子数据库,代码优先迁移,多个DbContext,嵌套实体类型。

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

  • 枚举类型具有使用具有固定响应数量的属性时的各种好处.

  • 当您使用枚举时,应用程序的安全性和可靠性都会增加.

  • 枚举使用户更难犯错误,注入攻击等问题也不存在.

  • 在Entity Framework中,枚举可以包含以下基础类型 :

    • Byte

    • Int16

    • Int32

    • Int64

    • SByte

  • 枚举元素的默认基础类型是int.

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

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

步骤1 : 从文件→新建→项目菜单选项创建新项目.

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

创建实体

第3步 : 输入EFEnumDemo作为项目名称,然后单击"确定".

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

步骤5 : 在Templates窗格中选择ADO.NET Entity Data Model.

Data Model Template

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

步骤7 : 在Entity Data Model Wizard页面上,选择Empty EF designer Model.

Model Wizard Page

第8步 : 单击完成

步骤9 : 然后右键单击设计器窗口并选择Add→Entity.

Designer Window Entity

出现New Entity对话框,如下图所示.

新实体对话框

第10步 : 输入Department作为实体名称,输入DeptID作为属性名称,将Property类型保留为Int32,然后单击OK.

步骤11 : 右键单击实体并选择Add New→Scalar Property.

Scalar Property

第12步 : 将新属性重命名为DeptName.

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

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

Type

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

Entity Framework Designer

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

Add Enum

步骤17 : 单击确定.

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

模型浏览器窗口

让我们按照模型第一方法章节中提到的所有步骤从模型生成数据库.

第1步 : 右键单击Entity Designer表面并选择Generate Database from Model.

显示Generate Database Wizard的Choose Your Data Connection对话框.

第2步 : 单击"新建连接"按钮.

连接按钮

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

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

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

第6步 : 右键单击T-SQL Editor并选择Execute.

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

我们建议你为了更好地理解,逐步执行上述示例.