Использование перечисления с Entity Framework - PullRequest
0 голосов
/ 07 декабря 2011

У меня есть класс, который выглядит так:

    [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; }
    }

В закомментированном бите я попытался использовать свойство enum, сопоставленное с 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 ]

1 голос
/ 19 июня 2012

приведение к int для сохранения

Alignment = (int)Coupon.ImgAlignment.TopRight
0 голосов
/ 07 декабря 2011

EFv4 не поддерживает перечисления.Вы не можете использовать их для настойчивости.Вместо этого вы должны использовать int сопоставленное свойство, а не сопоставленное свойство, преобразовав его в enum, как вы показали в своем примере.

Если вы используете свойство enum напрямую, я ожидаю, что оно не сопоставлено, поэтому установите его в значение enumне будет передавать значение в базу данных.В вашей базе данных (я полагаю, вы используете существующую, не сгенерированную EF) ваш столбец ImageAlignment, вероятно, необходим, и, поскольку ваше свойство не отображается (свойство enum пропущено), оно не передаст никакого значения в него = исключение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...