枚举支持-EF 设计器Enum Support - EF Designer

备注

EF5 仅向前-实体框架5中引入了本页中所述的功能、api 等。 如果使用的是早期版本,则部分或全部信息不适用。

此视频和分步演练演示了如何将枚举类型与 Entity Framework Designer 一起使用。 它还演示了如何在 LINQ 查询中使用枚举。

本演练将使用 Model First 创建新的数据库,但 EF 设计器也可以与Database First工作流一起用于映射到现有数据库。

实体框架5中引入了枚举支持。 若要使用枚举、空间数据类型和表值函数等新功能,则必须以 .NET Framework 4.5 为目标。 默认情况下,Visual Studio 2012 面向 .NET 4.5。

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

观看视频Watch the Video

此视频演示如何将枚举类型与 Entity Framework Designer 一起使用。 它还演示了如何在 LINQ 查询中使用枚举。

主讲人:Julia Kornich

视频:WMV | MP4 | WMV (ZIP)

先决条件Pre-Requisites

你将需要安装 Visual Studio 2012、旗舰版、高级版、专业版或 Web Express edition 才能完成此演练。

设置项目Set up the Project

  1. 打开 Visual Studio 2012
  2. 在 “文件“ 菜单上,指向 “新建“,然后单击 “项目
  3. 在左窗格中,单击 “ Visual C# “,然后选择控制台模板
  4. 输入EnumEFDesigner作为项目名称,然后单击 “确定”

使用 EF 设计器创建新模型Create a New Model using the EF Designer

  1. 右键单击 “解决方案资源管理器中的项目名称,指向”添加“,然后单击”新建项
  2. 从左侧菜单中选择 “数据“,然后在 “模板” 窗格中选择 “ ADO.NET 实体数据模型
  3. 输入EnumTestModel作为文件名,然后单击 “添加
  4. 在 “实体数据模型向导” 页上,在 “选择模型内容” 对话框中选择 “空模型
  5. 单击“完成”

此时会显示 Entity Designer,它提供了用于编辑模型的设计图面。

该向导执行下列操作:

  • 生成 EnumTestModel 文件,该文件定义概念模型、存储模型和这些模型之间的映射。 设置要嵌入到输出程序集的 .edmx 文件的元数据项目处理属性,以便将生成的元数据文件嵌入到程序集中。
  • 添加对以下程序集的引用:EntityFramework、System.componentmodel、DataAnnotations 和 System.object。
  • 创建 EnumTestModel.tt 和 EnumTestModel.Context.tt 文件,并将它们添加到 .edmx 文件下。 这些 T4 模板文件生成代码,该代码定义 DbContext 派生类型和映射到 .edmx 模型中的实体的 POCO 类型。

添加新的实体类型Add a New Entity Type

  1. 右键单击设计图面的空白区域,选择 “外接> 实体“,将显示 “新建实体” 对话框。
  2. 为类型名称指定部门并为键属性名称指定DepartmentID ,将类型保留为Int32
  3. 单击“确定”
  4. 右键单击该实体,然后选择 “添加新的> 标量属性
  5. 将新属性重命名为名称
  6. 将新属性的类型更改为Int32 (默认情况下,新属性为字符串类型)若要更改类型,请打开属性窗口并将 type 属性更改为Int32
  7. 添加另一个标量属性,并将其重命名为预算,将类型更改为Decimal

添加枚举类型Add an Enum Type

  1. 在 Entity Framework Designer 中,右键单击 “名称” 属性,选择 “转换为枚举

    转换为枚举

  2. 在 “添加枚举“ 对话框中,键入DepartmentNames作为枚举类型名称,将基础类型更改为Int32,然后将以下成员添加到该类型中:英语、数学和经济性

    添加枚举类型

  3. “确定”

  4. 保存模型并生成项目

    备注

    生成时,有关未映射实体和关联的警告可能出现在错误列表中。 你可以忽略这些警告,因为在我们选择从模型生成数据库后,错误将消失。

如果你查看属性窗口,你会注意到,Name 属性的类型已更改为DepartmentNames ,并且新添加的枚举类型已添加到类型列表中。

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

模型浏览器

备注

还可以通过单击鼠标右键并选择 “添加枚举类型“,从此窗口添加新枚举类型。 一旦创建类型,该类型就会出现在类型列表中,并且你可以与属性关联

从模型生成数据库Generate Database from Model

现在,我们可以生成一个基于该模型的数据库。

  1. 右键单击 Entity Designer 图面上的空白区域,然后选择 “从模型生成数据库
  2. “生成数据库” 向导的 “选择您的数据连接” 对话框随即出现,单击 “新建连接“ 按钮 “指定 (localdb)\mssqllocaldb 作为服务器名称,然后单击 “ 确定 “
  3. 询问是否要创建新数据库的对话框将弹出,单击 “是”
  4. 单击 “下一步“,”创建数据库向导” 生成用于创建数据库的数据定义语言(ddl)。在 “摘要和设置” 对话框中显示该 ddl 不包含映射到枚举类型的表的定义
  5. 单击 “完成“,单击 “完成” 不执行 DDL 脚本。
  6. 创建数据库向导执行以下操作:在 T-sql 编辑器中打开EnumTest生成存储架构并将连接字符串信息添加到 app.config 文件中的映射部分。
  7. 在 T-sql 编辑器中单击鼠标右键,然后选择 “执行连接到服务器” 对话框,输入步骤2中的连接信息,然后单击 “连接
  8. 若要查看生成的架构,请在 SQL Server 对象资源管理器中右键单击数据库名称,然后选择 “刷新

保留和检索数据Persist and Retrieve Data

打开 Program.cs 文件,其中定义了 Main 方法。 将以下代码添加到 Main 函数中。 该代码将新的部门对象添加到上下文中。 然后,它会保存数据。 此代码还执行 LINQ 查询,该查询返回名称为 DepartmentNames 的部门。

  1. using (var context = new EnumTestModelContainer())
  2. {
  3. context.Departments.Add(new Department{ Name = DepartmentNames.English });
  4. context.SaveChanges();
  5. var department = (from d in context.Departments
  6. where d.Name == DepartmentNames.English
  7. select d).FirstOrDefault();
  8. Console.WriteLine(
  9. "DepartmentID: {0} and Name: {1}",
  10. department.DepartmentID,
  11. department.Name);
  12. }

编译并运行该应用程序。 该程序生成以下输出:

  1. DepartmentID: 1 Name: English

若要查看数据库中的数据,请在 SQL Server 对象资源管理器中右键单击数据库名称,然后选择 “刷新“。 然后,单击表上的鼠标右键,然后选择 “查看数据“。

SummarySummary

在本演练中,我们介绍了如何使用 Entity Framework Designer 映射枚举类型以及如何在代码中使用枚举。