注释
仅限 EF5 - 本页中讨论的功能、API 等是在实体框架 5 中首次引入的。 如果使用早期版本,某些或全部信息不适用。
本视频和分步演练演示如何将枚举类型与 Entity Framework Code First 配合使用。 它还演示如何在 LINQ 查询中使用枚举。
本演练将使用 Code First 创建新数据库,但也可以使用 Code First 映射到现有数据库。
实体框架 5 中引入了枚举支持。 若要使用枚举、空间数据类型和表值函数等新功能,必须面向 .NET Framework 4.5。 默认情况下,Visual Studio 2012 面向 .NET 4.5。
在 Entity Framework 中,枚举可以具有以下基础类型: Byte、 Int16、 Int32、 Int64 或 SByte。
观看视频
此视频演示如何将枚举类型与 Entity Framework Code First 配合使用。 它还演示如何在 LINQ 查询中使用枚举。
作者:朱莉娅·科尔尼奇
先决条件
需要安装 Visual Studio 2012、Ultimate、Premium、Professional 或 Web Express 版本才能完成本演练。
设置项目
- 打开 Visual Studio 2012
- 在“文件”菜单上,指向“新建”,然后单击“项目”
- 在左窗格中,单击 “Visual C#”,然后选择 控制台 模板
- 输入 EnumCodeFirst 作为项目的名称,然后单击“ 确定”
使用 Code First 定义新模型
使用 Code First 开发时,通常首先编写定义概念(域)模型的 .NET Framework 类。 下面的代码定义 Department 类。
该代码还定义了 DepartmentNames 枚举。 默认情况下,枚举的类型 为 int 类型。 Department 类的 Name 属性属于 DepartmentNames 类型。
打开Program.cs文件并粘贴以下类定义。
public enum DepartmentNames
{
English,
Math,
Economics
}
public partial class Department
{
public int DepartmentID { get; set; }
public DepartmentNames Name { get; set; }
public decimal Budget { get; set; }
}
定义 DbContext 派生类型
除了定义实体,还需要定义派生自 DbContext 并公开 DbSet<TEntity> 属性的类。 DbSet<TEntity> 属性可让上下文知道要在模型中包括的类型。
DbContext 派生类型的实例在运行时管理实体对象,其中包括使用数据库中的数据填充对象、更改跟踪并将数据保存到数据库。
DbContext 和 DbSet 类型在 EntityFramework 程序集中定义。 我们将使用 EntityFramework NuGet 包添加对此 DLL 的引用。
- 在解决方案资源管理器中,右键单击项目名称。
- 选择 “管理 NuGet 包...”
- 在“管理 NuGet 包”对话框中,选择“ 联机 ”选项卡,然后选择 EntityFramework 包。
- 单击“安装”
请注意,除了 EntityFramework 程序集外,还添加了对 System.ComponentModel.DataAnnotations 和 System.Data.Entity 程序集的引用。
在Program.cs文件的顶部,添加以下 using 语句:
using System.Data.Entity;
在Program.cs添加上下文定义。
public partial class EnumTestContext : DbContext
{
public DbSet<Department> Departments { get; set; }
}
持久保存和检索数据
打开在其中定义 Main 方法的Program.cs文件。 将以下代码添加到 Main 函数中。 该代码向环境新增一个新的 Department 对象。 然后保存数据。 该代码还会执行一个 LINQ 查询,返回名称为 DepartmentNames.English 的部门。
using (var context = new EnumTestContext())
{
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} Name: {1}",
department.DepartmentID,
department.Name);
}
编译并运行应用程序。 该程序生成以下输出:
DepartmentID: 1 Name: English
查看生成的数据库
首次运行应用程序时,Entity Framework 会为你创建一个数据库。 由于已安装 Visual Studio 2012,因此将在 LocalDB 实例上创建数据库。 默认情况下,Entity Framework 将数据库命名为派生上下文的完全限定名称(在本示例中为 EnumCodeFirst.EnumTestContext)。 未来使用现有数据库的时间。
请注意,如果在创建数据库后对模型进行任何更改,则应使用 Code First 迁移来更新数据库架构。 有关使用迁移的示例,请参阅 Code First 迁移到新数据库。
若要查看数据库和数据,请执行以下操作:
- 在 Visual Studio 2012 主菜单中,选择 “视图 ->SQL Server 对象资源管理器”。
- 如果 LocalDB 不在服务器列表中,请单击 SQL Server 上的鼠标右键并选择 “添加 SQL Server 使用默认 Windows 身份验证 连接到 LocalDB 实例”
- 展开 LocalDB 节点
- 展开 “数据库” 文件夹以查看新数据库,并浏览到 Department 表。注意,Code First 不会创建映射到枚举类型的表。
- 若要查看数据,请右键单击表,然后选择“ 查看数据”
总结
在本演练中,我们介绍了如何将枚举类型与 Entity Framework Code First 配合使用。