2012-10-12 21 views
6

इकाई फ्रेमवर्क 5.0.0 एक int फ़ील्ड में शामिल होने पर [आवश्यक] विशेषता को अनदेखा करता है और अपवाद को फेंकने के बजाय स्वचालित रूप से 0 मान शामिल करता है। फ़ील्ड एक स्ट्रिंग है, तो आवश्यक विशेषता काम करता प्रतीत होता है। सरल मॉडल और नीचे फ़ंक्शन बनाने में कोई अपवाद नहीं फेंकता है। डीबीसीटेक्स क्लास डीबीसेट डिग्री के साथ ब्रेवटी के लिए नहीं दिखाया गया है।ईएफ 5 अनदेखा कर रहा है [आवश्यक] Int टाइप

public class Degree 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    [Required] 
    public int Field { get; set; } 
} 


private static void CreateDegree() 
{ 
    var degree = new Degree { Name = "Mechanical Engineering" }; 
    var db = new Context(); 
    db.Degrees.Add(degree); 

    // try statement 
} 

यह शायद मेरे हिस्से पर एक साधारण गलतफहमी है, लेकिन किसी भी विचार/सहायता की सराहना की जाएगी।

उत्तर

14

[Required] विशेषता इंगित करती है कि एक मूल्य मौजूद होना चाहिए। जब Degree बनाया गया है, Field को 0 से प्रारंभ किया गया है क्योंकि यह int एस के लिए डिफ़ॉल्ट मान है। चूंकि 0 एक मान है, यह [Required] विशेषता को संतुष्ट करता है।

आप निर्दिष्ट करने के लिए है कि मूल्य 0. से अधिक होना चाहिए एक [Range] विशेषता का उपयोग करना चाहें या फिर आप एक int? के लिए मॉडल को बदल सकता है, इतना है कि यह null होगा जब तक कि यह कुछ मूल्य के लिए शुरू हो गया।

+0

'Int?' अच्छी तरह से काम। परिज्ञान के लिए धन्यवाद। – Mebourne

7

आपका फ़ील्ड int प्रकार है जो हमेशा एक मान रखेगा। जब आप Degree वर्ग का एक नया उदाहरण बनाने Field संपत्ति 0.

के लिए शुरू हो जाएगा आप स्तंभ संपत्ति int? के प्रकार बनाने के नल होना चाहते हैं। एक शून्य प्रकार के साथ ईएफ एक त्रुटि फेंक देगा यदि मान null है।

public class Degree 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    [Required] 
    public int? Field { get; set; } 
} 
+0

यह ठीक काम करता है, बस उस int सावधान रहें? अंतर्निहित रूप से int int में परिवर्तित नहीं किया जा सकता है। इसलिए आपको अपने कुछ कोड को बदलना पड़ सकता है जो फ़ील्ड पूर्णांक का संदर्भ देता है। इसे यहां कुछ तरीकों से संभाला जा सकता है: http://stackoverflow.com/questions/8053698/cannot-implicitly-convert-type-int-to-int –