将字段映射到EntityFramework 5 Code First中的枚举

时间:2013-03-21 13:11:49

标签: entity-framework-5

所以,我有一个课程如下:

public class Message {

        public enum MessageType {
            Text = 0,
            Audio = 1,
            Image = 2
        }

        public int Uid { get; set; }
        public MessageType Type { get; set; }
        public String Text { get; set; }

}

如您所见,Type字段是枚举。我将数据匹配到此类的映射定义如下:

public class MessagesMap : EntityTypeConfiguration<Message> {

    public MessagesMap() {

        // Primary Key
        this.HasKey(t => t.Uid);

        // Properties
        this.Property(t => t.Text)
            .HasMaxLength(1000);

        // Table & Column Mappings
        this.ToTable("wc_messages");
        this.Property(t => t.Uid).HasColumnName("UID");
        this.Property(t => t.Type).HasColumnName("Type");
        this.Property(t => t.Text).HasColumnName("Text");

    }
}

但是当我运行代码时,我收到以下错误:

  

属性“Type”不是“Message”类型的声明属性。使用Ignore方法或NotMappedAttribute数据批注验证是否未从模型中显式排除该属性。确保它是有效的原始属性。

我理解我收到错误,因为Type属性不是基元,而是枚举。但是,如果我理解正确,EF5支持枚举(我的目标是.NET 4.5框架),所以我假设我在我的映射中遗漏了一些不能解释如何转换为枚举的东西,但我很茫然至于那是什么。如果我将字段更改回int,则一切正常,只有当字段类型为枚举时才会出现错误。

我错过了什么?提前谢谢。

1 个答案:

答案 0 :(得分:17)

所以事实证明我只是愚蠢并且在POCO类中声明了我的枚举块并且完全没有注意到它。我意识到这要归功于来自@overmachine的忍者评论(随后消失了)并将声明移出我的班级导致一切都恢复正常。非常感谢他,无论他去哪里,并且学到了更多的专注叹息