Een enum gebruiken met Entity Framework

Ik heb een klasse die er zo uitziet:

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

De commented out bit is waar ik een enum-eigenschap probeerde te gebruiken die was toegewezen aan een int in de DB, zonder te verwachten dat deze automatisch zou werken. Het probleem is, deze code:

 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();

genereert altijd een uitzondering dat de kolom 'ImageAlignment' niet nul mag zijn. Maar het object dat ik passeer, heeft een waarde voor deze eigenschap, ik stel het in, de Alignment-eigenschap moet naar die kolom verwijzen, toch?

0

2 antwoord

cast to int to save

Alignment = (int)Coupon.ImgAlignment.TopRight
1
toegevoegd

EFv4 ondersteunt geen Enums. Je kunt ze niet gebruiken voor volharding. In plaats daarvan moet u de in kaart gebrachte eigenschap int en de niet-toegewezen eigenschap gebruiken om deze te converteren zoals u in uw voorbeeld hebt getoond.

Als u direct de eigenschap Enum gebruikt, is mijn verwachting dat deze niet wordt toegewezen, dus als u deze waarde opgeeft, wordt de waarde niet doorgegeven aan de database. In uw database (ik verwacht dat u een bestaande gebruikt die niet door EF is gegenereerd) is uw kolom ImageAlignment waarschijnlijk vereist en omdat uw eigenschap niet wordt toegewezen (enum-eigenschap wordt overgeslagen), zal deze geen waarde doorgeven tot het = uitzondering.

0
toegevoegd
OK, dat zou logisch zijn voor mij, behalve dat ik het aan een int-kolom toewijst die een waarde had, en dat vervolgens toewijs aan een enum in code, en het werkte nog steeds niet. Dus, is er iets speciaals dat ik moet doen om in een int-kolom te plaatsen?
toegevoegd de auteur cgraus, de bron