2014-06-22 29 views
23

Gerekli bir alan alanını kullanarak bir veritabanı tablosu oluşturuyorum. Ancak, tabloyu beslerken, enum alanını beslemek için atlamak mümkündür: EF herhangi bir hata mesajı atmayacak ancak alanı 0 değeriyle besleyecektir. Neler olduğunu anlamama yardım edebilir misin? TeşekkürEntity Framework 6 Kod İlk - Gerekli Enum veri türü çalışmıyor

public enum TestEnum { 
     test1=1, 
     test2=2, 
     test3=3, 
     test4=4 
    } 

public class TestEnumClass 
{ 
    [Key] 
    public int id { get; set; } 
    [Required(ErrorMessage = "Required"), Display(Name = "Test Enum")] 
    public TestEnum test{ get; set; } 
} 

cevap

15

Bunun nedeni .NET nasıl işlendiğine Enum türü taşımaktadır. Bir değer sağlamazsanız, 0 değeri atanmış gibi etkilidir. Enum tanımlanmış 0 değerine sahipse, enum değişkenine doğru değer atanır. Değer atanmamışsa, yine de 0 değerini atar, ancak int değerini doğru enum değerine dönüştüremediğinden kullanmayı denediğinizde başarısız olur.

Sizin durumunuzda, 0 değerini eklemek ve belirli bir değere atamak veya Varsayılan, Boş değer veya numaranıza benzer bir şey atamak mümkün olup olmadığını öneririm.

public enum TestEnum { 
    NotSet = 0, 
    test1 = 1, 
    test2 = 2, 
    test3 = 3, 
    test4 = 4 
} 

o zaman bu değeri karşılaştırabilirsiniz doğrulamak isterseniz değil

34

Kullanım RangeAttribute 0'a eşittir: Bu üç yıl önce olduğunu biliyorum

public enum TestEnum 
{ 
    test1 = 1, 
    test2 = 2, 
    test3 = 3, 
    test4 = 4 
} 

public class TestEnumClass 
{ 
    [Key] 
    public int id { get; set; } 

    [Range(1, 4), Display(Name = "Test Enum")] 
    public TestEnum test{ get; set; } 
} 
+0

ve tüm, ama bu yöntem, satırda hataya neden olabilecek bilgileri çoğaltır. Örneğin, test5'i "TestEnum" öğesine eklerseniz, 'TestEnum' özelliğine sahip herhangi bir EF nesnesindeki aralığı değiştirmeyi hatırlamalıyım. – Joe

+0

@Joe: Doğrulama özelliğini bu gibi ayarlayın [Aralık (1, int.MaxValue), Ekran (Ad = "Test Enum")] ve yanlış bir int- değeri el ile girilir, eğer gerçekten ihtiyacınız varsa, bu gibi durumlarda savunmak için özel doğrulama ekleyebiliriz. Örneğin TestEnumClass uygulaması IValidateObject. Hiçbir değer verilmediğinde 0 değeri varsayılan değerdir, sıfırdan büyük pozitif tamsayılar manuel olarak girilmelidir. –

İlgili konular