枚举支持 - EF 设计器
注意
仅限 EF5 及更高版本 - 此页面中讨论的功能、API 等已引入实体框架 5。 如果使用的是早期版本,则部分或全部信息不适用。
此视频和分步演练演示如何通过实体框架设计器使用枚举类型。 它还演示了如何在 LINQ 查询中使用枚举。
本演练将使用 Model First 来创建新的数据库,但也可将 EF 设计器与 Database First 工作流结合使用以映射到现有数据库。
实体框架 5 中引入了枚举支持。 若要使用枚举、空间数据类型和表值函数等新功能,必须面向 .NET Framework 4.5。 Visual Studio 2012 默认面向 .NET 4.5。
在实体框架中,枚举可以具有以下基础类型:Byte、Int16、Int32、Int64 或 SByte。
观看视频
此视频演示如何通过 Entity Framework Designer 使用枚举类型。 它还演示了如何在 LINQ 查询中使用枚举。
主讲人:Julia Kornich
先决条件
需要安装 Visual Studio 2012、Ultimate、Premium、Professional 或 Web Express Edition 才能完成本演练。
设置项目
- 打开 Visual Studio 2012
- 在“文件”菜单上指向“新建”,然后单击“项目”
- 在左侧窗格中,单击“Visual C#”,然后选择“控制台”模板
- 输入“EnumEFDesigner”作为项目名称,然后单击“确定”
使用 EF 设计器创建新模型
- 在“解决方案资源管理器”中右键单击该项目名称,指向“添加”,然后单击“新建项”
- 从左侧菜单中选择“数据”,然后在“模板”窗格中选择“ADO.NET 实体数据模型”
- 输入“EnumTestModel.edmx”作为文件名,然后单击“添加”
- 在“实体数据模型向导”页面的“选择模型内容”对话框中,选择“空模型”
- 单击“完成”
将显示 Entity Designer,它提供用于编辑模型的设计图面。
该向导执行下列操作:
- 生成 EnumTestModel.edmx 文件,该文件定义概念模型、存储模型以及这两种模型之间的映射。 将 .edmx 文件的元数据项目处理属性设置为嵌入输出程序集中,以便将生成的元数据文件嵌入到程序集中。
- 添加对以下程序集的引用:EntityFramework、System.ComponentModel.DataAnnotations 和 System.Data.Entity。
- 创建 EnumTestModel.tt 和 EnumTestModel.Context.tt 文件,并添加在 .edmx 文件下。 这些 T4 模板文件会生成用于定义映射到 .edmx 模型中实体的 DbContext 派生类型和 POCO 类型的代码。
添加新的实体类型
- 右键单击设计图面的空白区域,选择“添加”->“实体”,将出现“新建实体”对话框
- 指定“Department”作为类型名称并指定“DepartmentID”作为键属性名称,将类型保留为“Int32”
- 单击 “确定”
- 右键单击实体并选择“添加新实体”->“标量属性”
- 将新属性重命名为“Name”
- 将新属性的类型更改为“Int32”(默认情况下,新属性的类型为 String 类型)。若要更改类型,请打开“属性”窗口,将“类型”属性更改为“Int32”
- 添加另一个标量属性并将其重命名为 “Budget”,然后将类型更改为“Decimal”
添加枚举类型
在 Entity Framework Designer 中,右键单击“名称”属性,然后选择“转换为枚举”
在“添加枚举”对话框中,键入“DepartmentNames”作为枚举类型名称,将“基础类型”更改为“Int32”,然后将以下成员添加到类型:English、Math 和 Economics
按“确定”。
保存模型并生成项目
注意
生成模型时,错误列表中可能会出现有关未映射实体和相关实体的警告。 可以忽略这些警告,因为选择从模型生成数据库后,错误就会消失。
如果查看属性窗口,你会注意到 Name 属性的类型已更改为 DepartmentNames 并且新添加的枚举类型已添加到类型列表中。
如果切换到“模型浏览器”窗口,则会看到“枚举类型”节点中也添加了该类型。
注意
还可以从此窗口添加新枚举类型,方法是单击鼠标右键并选择“添加枚举类型”。 创建类型后,该类型将显示在类型列表中,可以将其与属性相关联
从模型生成数据库
现在,可以根据模型生成数据库。
- 右键单击 Entity Designer 图面上的空白区域,然后选择“从模型生成数据库”
- 将显示“生成数据库”向导的“选择数据连接”对话框 单击“新建连接”按钮指定“(localdb)\mssqllocaldb”作为服务器名称,并指定“EnumTest”作为数据库,然后单击“确定”
- 将弹出一个对话框,询问是否要创建新数据库,请单击“是”。
- 单击“下一步”,“创建数据库”向导将生成用于创建数据库的数据定义语言 (DDL)生成的 DDL 显示在“摘要和设置”对话框中 请注意,DDL 不包含映射到枚举类型的表的定义
- 单击“完成”单击“完成”并不会执行 DDL 脚本。
- “创建数据库”向导执行以下操作: 在 T-SQL 编辑器中打开 EnumTest.edmx.sql生成 EDMX 文件的存储架构和映射部分 将连接字符串信息添加到 App.config 文件中
- 在 T-SQL 编辑器中单击鼠标右键并选择“执行”将出现“连接到服务器”对话框,输入步骤 2 中的连接信息,然后单击“连接”
- 若要查看生成的架构,请在 SQL Server 对象资源管理器中右键单击数据库名称,然后选择“刷新”
保留和检索数据
打开 Program.cs 文件,其中定义了 Main 方法。 将以下代码添加到 Main 函数中。 该代码会将一个新的 Department 对象添加到上下文中。 然后,它会保存数据。 该代码还会执行一个 LINQ 查询,该查询返回名称为 DepartmentNames.English 的 Department。
using (var context = new EnumTestModelContainer())
{
context.Departments.Add(new Department{ Name = DepartmentNames.English });
context.SaveChanges();
var department = (from d in context.Departments
where d.Name == DepartmentNames.English
select d).FirstOrDefault();
Console.WriteLine(
"DepartmentID: {0} and Name: {1}",
department.DepartmentID,
department.Name);
}
编译并运行该应用程序。 该程序生成以下输出:
DepartmentID: 1 Name: English
若要查看数据库中的数据,请在 SQL Server 对象资源管理器中右键单击数据库名称,然后选择“刷新”。 然后,在表上单击鼠标右键并选择“查看数据”。
总结
在本演练中,我们了解了如何使用 Entity Framework Designer 映射枚举类型以及如何在代码中使用枚举。