在Entity Framework中,此功能允许您在域类上定义属性类型的属性,并将其映射到整数类型的数据库列.然后,实体框架将在查询和保存数据时将数据库值转换为相关枚举值.
枚举类型具有使用具有固定响应数量的属性时的各种好处.
当您使用枚举时,应用程序的安全性和可靠性都会增加.
枚举使用户更难犯错误,注入攻击等问题也不存在.
在Entity Framework中,枚举可以包含以下基础类型 :
Byte
Int16
Int32
Int64
SByte
枚举元素的默认基础类型是int.
默认情况下,第一个枚举数的值为0,每个连续枚举数的值增加1.
让我们看看下面的示例,其中我们将在设计器中创建一个实体,然后添加一些属性.
步骤1 : 从文件→新建→项目菜单选项创建新项目.
步骤2 : 在左侧窗格中,选择控制台应用程序.
第3步 : 输入EFEnumDemo作为项目名称,然后单击"确定".
步骤4 : 在解决方案资源管理器中右键单击项目名称,然后选择添加→新项菜单选项.
步骤5 : 在Templates窗格中选择ADO.NET Entity Data Model.
第6步 : 输入EFEnumModel.edmx作为文件名,然后单击"添加".
步骤7 : 在Entity Data Model Wizard页面上,选择Empty EF designer Model.
第8步 : 单击完成
步骤9 : 然后右键单击设计器窗口并选择Add→Entity.
出现New Entity对话框,如下图所示.
第10步 : 输入Department作为实体名称,输入DeptID作为属性名称,将Property类型保留为Int32,然后单击OK.
步骤11 : 右键单击实体并选择Add New→Scalar Property.
第12步 : 将新属性重命名为DeptName.
步骤13 : 将新属性的类型更改为Int32(默认情况下,新属性为String类型).
步骤14 : 要更改类型,请打开"属性"窗口并将"类型"属性更改为Int32.
步骤15 : 在Entity Framework Designer中,右键单击Name属性,选择Convert to enum.
第16步 : 在"添加枚举类型"对话框中,为"枚举类型名称"输入DepartmentNames,将"基础类型"更改为Int32,然后将以下成员添加到"物理","化学","计算机"和"经济学"类型中.
步骤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.
第7步 : 要查看生成的模式,请右键单击SQL Server对象资源管理器中的数据库名称,然后选择"刷新".
您将在数据库中看到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
我们建议你为了更好地理解,逐步执行上述示例.