首先在EF代码中使用枚举是否有标准方法?似乎有一些例子为枚举使用了包装类。
但是,我希望能够定义枚举,并使用数据库初始化程序将枚举值也播种到数据库中。如果我必须从枚举手动播种数据库表,那么定义枚举和创建包装器似乎没什么意义。
答案 0 :(得分:71)
不幸的是,EF 4.1本身不支持enums
。这是一篇关于如何处理它们的着名文章:Faking enums on 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 - map enum wrapper as complex type
答案 1 :(得分:19)
Microsoft Entity Framework 2011年6月CTP引入了新的运行时和设计时功能。以下是一些新的运行时功能:
- Enum 数据类型现在可在实体框架中使用。您可以使用Visual Studio中的实体设计器为具有Enum属性的实体建模,或使用Code First工作流定义具有Enum对象作为属性的实体。您可以像使用任何其他标量属性一样使用您的Enum属性,例如LINQ查询和更新......
Visual Studio中的实体框架设计器有几个新功能:
- 实体设计师现在支持从设计师表面创建枚举,空间数据类型和表值函数 ...
答案 2 :(得分:-1)
我写了一篇关于此的帖子。您可以使用Code First Migrations将枚举值添加到数据库。看这里:http://linqto.net/blog/2012/10/entity-framework-code-first-and-enum-support/