Entity framework 4 使用带有实体框架的枚举

Entity framework 4 使用带有实体框架的枚举,entity-framework-4,Entity Framework 4,我有一个类似这样的类: [Table("Coupons")] public class Coupon { [Column("VET_ID")] public string VetId { get; set; } [Key] public int CouponId { get; set; } public string Name { get; set; } public s

我有一个类似这样的类:

    [Table("Coupons")]
    public class Coupon
    {
        [Column("VET_ID")]
        public string VetId { get; set; }

        [Key]
        public int CouponId { get; set; }

        public string Name { get; set; }

        public string ImageName { get; set; }

        public string Text { get; set; }

        [Column("ImageAlignment")]
        public ImgAlignment Alignment { get; set; }

        public enum ImgAlignment { TopLeft = 0, TopRight = 1, BottomLeft = 2, BottomRight = 3 };

/*        public ImgAlignment Alignment
        {
            get { return (ImgAlignment) ImageAlignment; }
            set 
                { ImageAlignment = (int) value; }
        }
        */
        public string Html { get; set; }
    }
注释掉的位是我尝试使用映射到DB中int的enum属性的位置,而不希望它自动工作。问题是,这个代码:

 Coupon newCoupon = new Coupon
                {
                    Text = coupon,
                    Name = couponName,
                    VetId = data.VetId,
                    ImageName = string.Empty,
                    Alignment = Coupon.ImgAlignment.TopRight,
                    Html = string.Empty
                };

                db.Coupons.Add(newCoupon);
                db.SaveChanges();

始终引发列“ImageAlignment”不能为null的异常。但是我要传递的对象具有此属性的值,我正在设置它,对齐属性应该映射到该列,对吗?

EFv4不支持枚举。您不能将它们用于持久性。您必须使用
int
mapped属性,而非mapped属性将其转换为enum,如您在示例中所示

如果您直接使用enum属性,我的期望是它没有映射,所以将其设置为enum value不会将值传递给数据库。在您的数据库中(我希望您使用的是不是EF生成的现有数据库)可能需要
ImageAlignment
列,因为您的属性没有映射(枚举属性被跳过),所以它不会向它传递任何值=exception。

转换为int以保存

Alignment = (int)Coupon.ImgAlignment.TopRight

好的,这对我来说是有意义的,除了我把它映射到一个有值的int列,然后在代码中将它映射到一个enum,但它仍然不起作用。那么,映射到int列需要做什么特殊的事情吗?