我有一个看起来像这样的课程:
[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属性应该映射到那个列,对吗?
答案 0 :(得分:1)
强制转换为int以保存
Alignment = (int)Coupon.ImgAlignment.TopRight
答案 1 :(得分:0)
EFv4不支持枚举。您不能将它们用于持久性。您必须使用int
映射属性,而非映射属性将其转换为枚举,如您在示例中所示。
如果直接使用enum属性,我的期望是它没有映射,因此将其设置为枚举值不会将值传递给数据库。在您的数据库中(我希望您使用的是非EF生成的现有数据库)可能需要ImageAlignment
列,并且由于您的属性未映射(枚举属性被跳过),因此它不会将任何值传递给它=异常。