问题描述
|
有没有一种在EF代码优先中使用枚举的标准方法?似乎有一些使用枚举包装类的示例。
但是,我希望能够定义枚举并使用数据库初始化程序将枚举值也播种到数据库中。如果我随后必须手动从枚举中播种数据库表,那么定义枚举和创建包装似乎没有多大意义。
解决方法
现在受支持:http://blogs.msdn.com/b/adonet/archive/2011/06/30/announcing-the-microsoft-entity-framework-june-2011-ctp.aspx
Microsoft实体框架2011年6月CTP引入了新的运行时和设计时功能。以下是一些新的运行时功能:
现在,实体框架中提供了Enum数据类型。您可以在Visual Studio中使用“实体设计器”对具有Enum属性的实体进行建模,也可以使用Code First工作流来定义将Enum对象作为属性的实体。您可以像使用其他标量属性一样使用Enum属性,例如在LINQ查询和更新中。
Visual Studio中的实体框架设计器有几个新功能:
实体设计器现在支持从设计器表面创建枚举,空间数据类型和表值函数...
, 不幸的是,EF 4.1本身不支持“ 0”。这是一篇有关如何处理它们的著名文章:伪造EF 4枚举。但是,它确实需要包装。
但是,在EF 4中有一种更简单的映射枚举的方法:只需在您的类上创建一个int属性来表示枚举的int值。那是EF应该映射的属性,然后有一个“迷你包装器”属性,允许您使用枚举。
public class Appointment
{
public int ID { get; set; }
public string Description { get; set; }
// This property will be mapped
public int DayOfWeekValue { get; set; }
public DayOfWeek Day
{
get { return (DayOfWeek) DayOfWeekValue; }
set { DayOfWeekValue = (int) value; }
}
}
public enum DayOfWeek
{
Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday
}
在生成数据库时,EF将愉快地忽略它不知道如何映射的任何类型,但是将映射int属性。
注意:这直接取自我对另一个enum
和EF
问题的回答:EF 4.1代码优先-映射枚举包装为复杂类型
, 我写了一篇关于这个的帖子。您可以使用Code First Migrations将枚举值添加到数据库中。在这里查看:http://linqto.net/blog/2012/10/entity-framework-code-first-and-enum-support/