枚举支持-Code FirstEnum Support - Code First
备注
EF5 仅向前-实体框架5中引入了本页中所述的功能、api 等。 如果使用的是早期版本,则部分或全部信息不适用。
此视频和分步演练演示了如何使用实体框架 Code First 的枚举类型。 它还演示了如何在 LINQ 查询中使用枚举。
本演练将使用 Code First 创建新数据库,但也可以使用Code First 映射到现有数据库。
实体框架5中引入了枚举支持。 若要使用枚举、空间数据类型和表值函数等新功能,则必须以 .NET Framework 4.5 为目标。 默认情况下,Visual Studio 2012 面向 .NET 4.5。
在实体框架中,枚举可以具有以下基础类型:Byte、 Int16、 Int32、 Int64或SByte。
观看视频Watch the video
此视频演示如何使用实体框架 Code First 的枚举类型。 它还演示了如何在 LINQ 查询中使用枚举。
主讲人:Julia Kornich
先决条件Pre-Requisites
你将需要安装 Visual Studio 2012、旗舰版、高级版、专业版或 Web Express edition 才能完成此演练。
设置项目Set up the Project
- 打开 Visual Studio 2012
- 在 “文件“ 菜单上,指向 “新建“,然后单击 “项目“
- 在左窗格中,单击 “ Visual C# “,然后选择控制台模板
- 输入EnumCodeFirst作为项目名称,然后单击 “确定”
使用 Code First 定义新模型Define a New Model using Code First
使用 Code First 开发时,通常首先编写定义概念(域)模型 .NET Framework 类。 下面的代码定义了部门类。
该代码还定义了 DepartmentNames 枚举。 默认情况下,枚举的类型为int 。 部门类的 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 派生类型Define the DbContext Derived Type
除了定义实体外,还需要定义派生自 DbContext 的类,并公开 DbSet
DbContext 派生类型的实例在运行时管理实体对象,这包括使用数据库中的数据填充对象、更改跟踪以及将数据保存到数据库。
DbContext 和 DbSet 类型是在 EntityFramework 程序集中定义的。 我们将使用 EntityFramework NuGet 包添加对此 DLL 的引用。
- 在解决方案资源管理器中,右键单击项目名称。
- 选择 “管理 NuGet 包 … “
- 在 “管理 NuGet 包” 对话框中,选择 “联机“ 选项卡,然后选择 “ EntityFramework “ 包。
- 单击“安装”
请注意,除 EntityFramework 程序集之外,还添加了对 System.componentmodel 和 DataAnnotations 程序集的引用。
在 Program.cs 文件的顶部,添加以下 using 语句:
using System.Data.Entity;
在 Program.cs 中,添加上下文定义。
public partial class EnumTestContext : DbContext
{
public DbSet<Department> Departments { get; set; }
}
保留和检索数据Persist and Retrieve Data
打开 Program.cs 文件,其中定义了 Main 方法。 将以下代码添加到 Main 函数中。 该代码将新的部门对象添加到上下文中。 然后,它会保存数据。 此代码还执行 LINQ 查询,该查询返回名称为 DepartmentNames 的部门。
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
查看生成的数据库View the Generated Database
首次运行应用程序时,实体框架会为您创建一个数据库。 由于我们安装了 Visual Studio 2012,因此将在 LocalDB 实例上创建数据库。 默认情况下,实体框架在派生上下文的完全限定名称后命名数据库(在此示例中为EnumTestContext)。 随后将使用现有数据库的时间。
请注意,如果在创建数据库后对模型进行了任何更改,则应使用 Code First 迁移来更新数据库架构。 有关使用迁移的示例,请参阅Code First 到新的数据库。
若要查看数据库和数据,请执行以下操作:
- 在 Visual Studio 2012 主菜单中,选择 “查看 -> SQL Server 对象资源管理器“。
- 如果 LocalDB 不在服务器列表中,请在SQL Server上单击鼠标右键按钮,然后选择 “添加 SQL Server使用默认Windows 身份验证连接到 LocalDB 实例
- 展开 LocalDB 节点
- 展开 “数据库“ 文件夹以查看新数据库并浏览到 “部门“ 表,该 Code First 不会创建映射到枚举类型的表
- 若要查看数据,请右键单击该表,然后选择 “查看数据“
SummarySummary
在本演练中,我们介绍了如何使用实体框架 Code First 的枚举类型。