实体框架 – 枚举支持
实体框架 – 枚举支持
在实体框架中,此功能将允许您在枚举类型的域类上定义属性,并将其映射到整数类型的数据库列。然后,实体框架将在查询和保存数据时将数据库值与相关枚举相互转换。
-
在处理具有固定响应数量的属性时,枚举类型具有各种好处。
-
当您使用枚举时,应用程序的安全性和可靠性都会增加。
-
枚举使用户更难犯错误,并且不存在注入攻击等问题。
-
在实体框架中,枚举可以具有以下基础类型 –
- 字节
- 整数16
- 整数32
- 64位
- 字节
-
枚举元素的默认基础类型是 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 – 在实体框架设计器中,右键单击 Name 属性,选择 Convert to enum。
步骤 16 – 在添加枚举类型对话框中,为枚举类型名称输入 DepartmentNames,将底层类型更改为 Int32,然后将以下成员添加到类型中:物理、化学、计算机和经济学。
步骤 17 – 单击确定。
如果您切换到 Model Browser 窗口,您将看到该类型也被添加到 Enum Types 节点。
让我们按照模型优先方法章节中提到的所有步骤从模型生成数据库。
步骤 1 – 右键单击实体设计器表面并选择从模型生成数据库。
将显示生成数据库向导的选择您的数据连接对话框。
步骤 2 – 单击新建连接按钮。
步骤 3 – 输入数据库的服务器名称和 EnumDemo,然后单击确定。
步骤 4 – 将弹出询问您是否要创建新数据库的对话框,单击是。
步骤 5 – 单击下一步,创建数据库向导会生成用于创建数据库的数据定义语言 (DDL)。现在单击完成。
步骤 6 – 右键单击 T-SQL 编辑器并选择执行。
步骤 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
我们建议您逐步执行上述示例,以便更好地理解。