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列需要做什么特殊的事情吗?