首先在EF代码中枚举

时间:2012-04-12 09:52:17

标签: entity-framework-4 enums code-first

请先了解如何在Entity Framework代码中使用枚举。我希望在我的班级“Annonce”中我可以拥有这个属性

public Status EtatAnnonce { get; set; } 

和状态定义如下

public enum Status
{
    Pending,
    Approved
}

4 个答案:

答案 0 :(得分:2)

您需要创建一个转换器字段,将值作为int存储在数据库中。

public int MyEnumValueInt {get;set;}

[NotMapped]
public MyEnum MyEnumValue
{
    get{ return (MyEnum)MyEnumValueInt;
    set{ MyEnumValueInt = (int)value;
}

注意:在EF 5中将改进枚举支持。

答案 1 :(得分:1)

会指向你

EF5 does not create enum columns

首先在Entity Framework代码中提供枚举支持的摘要:

EF4:不支持

EF5:仅在您定位.net framework 4.5及更高版本

时才受支持

EF6:仅在您定位.net 4.0及更高版本

时才受支持

干杯!

答案 2 :(得分:0)

我在EF中回答了两个关于Enums的问题;这些应该可以帮助你:

Enums with EF code-first - standard method to seeding DB and then using?

EF 4.1 Code First - map enum wrapper as complex type

答案 3 :(得分:0)

您可以在模型中使用私有属性将数据映射到所需的任何属性类型。

// Model
public class Piece
{

    // Subclass Piece to add mappings for private properties
    public class PieceConfig : EntityTypeConfiguration<Piece>
    {
        public PieceConfig()
        {
            Property(b => b.dbtype); // needed for EF to see the private property
        }
    }

    [Column("type", TypeName = "VARCHAR")]
    private string dbtype { get; set; }

    [NotMapped]
    public PIECE type
    {
        get { return (PIECE)Enum.Parse(typeof(PIECE), dbtype); }
        set { dbtype= value.ToString(); }
    }
}

然后您只需要将配置添加到OnModelCreating方法

modelBuilder.Configurations.Add(new Piece.PieceConfig());