使用EF代码优先的枚举 - 用于播种数据库然后使用的标准方法?

时间:2011-06-14 13:14:10

标签: entity-framework-4.1 ef-code-first

首先在EF代码中使用枚举是否有标准方法?似乎有一些例子为枚举使用了包装类。

但是,我希望能够定义枚举,并使用数据库初始化程序将枚举值也播种到数据库中。如果我必须从枚举手动播种数据库表,那么定义枚举和创建包装器似乎没什么意义。

3 个答案:

答案 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属性。

注意:这是直接来自我对另一个enumEF问题的回答:EF 4.1 Code First - map enum wrapper as complex type

答案 1 :(得分:19)

现在支持:http://blogs.msdn.com/b/adonet/archive/2011/06/30/announcing-the-microsoft-entity-framework-june-2011-ctp.aspx

  

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/