使用带有实体框架的枚举

时间:2011-12-07 00:39:57

标签: 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 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; }
    }

注释掉的位是我尝试使用枚举属性的地方,该属性映射到数据库中的int,而不期望它自动运行。麻烦的是,这段代码:

 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”列不能为空的异常。但是我传入的对象有这个属性的值,我设置它,Alignment属性应该映射到那个列,对吗?

2 个答案:

答案 0 :(得分:1)

强制转换为int以保存

Alignment = (int)Coupon.ImgAlignment.TopRight

答案 1 :(得分:0)

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

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