2011-12-07 45 views
0

我有一个类,看起来像这样:使用实体框架枚举

[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一个枚举的财产,不期待它自动工作。问题是,这个代码:

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属性应该映射到该列,对吗?

回答

0

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

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

+0

OK,那将是有意义的我,除了我将其映射到其中有一个值int列,然后映射,要枚举的代码,并仍然没有工作。那么,有什么特别的我需要做的映射到一个int列? – cgraus

1

强制转换为int,以节省

Alignment = (int)Coupon.ImgAlignment.TopRight