मान्य नहीं है मेरे पास एक साधारण परीक्षण परिदृश्य में एक ऑब्जेक्ट है जो ईएफ कोड का उपयोग करता है और IValidalidableObject लागू करता है। कुछ बहुत ही सरल तर्क है जो एक सत्यापन त्रुटि जोड़ता है और इसे वापस देता है। वस्तु पर अन्य सत्यापन भी हैं।ईएफ कोड पहले: IValidalidable ऑब्जेक्ट
हालांकि, ऑब्जेक्ट को सहेजते समय - विशेषता आधारित सत्यापन कार्य करते समय - IValidalidableObject इंटरफ़ेस कभी भी आग लगती नहीं है। डीबगर इसमें कदम नहीं उठाता है और त्रुटि कभी भी SaveChanges() या GetValidationErrors() को कॉल करने के साथ दिखाई नहीं देती है।
public class Customer : IValidatableObject {
[Key]
public int Id { get; set; }
[StringLength(50)]
[DisplayName("First Name")]
public string FirstName { get; set; }
[Required]
[DisplayName("Last Name")]
[StringLength(50)]
public string LastName { get; set; }
[Required]
[StringLength(100)]
public string Company { get; set; }
[StringLength(200)]
public string Email { get; set; }
[DisplayName("Credit Limit")]
public decimal CreditLimit { get; set; }
[DisplayName("Entered On")]
public DateTime? Entered { get; set; }
public virtual ICollection<Address> Addresses { get; set; }
public Customer()
{
Entered = DateTime.Now;
CreditLimit = 1000.00M;
Addresses = new List<Address>();
}
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
var results = new List<ValidationResult>();
// add an error ALWAYS for testing - it doesn't show up
// and the debugger never hits this code
results.Add(new ValidationResult("Validate Added message",new [] { "Company" }));
return results;
}
जब मैं अब एक ग्राहक जोड़ सकते हैं और सत्यापन त्रुटियों के लिए जाँच करने के लिए प्रयास करें:
public void AddNewCustomer()
{
Customer customer = new Customer();
context.Customers.Add(customer);
customer.LastName = "Strahl";
customer.FirstName = "Rick";
customer.Entered = DateTime.Now;
//customer.Company = "West Wind"; // missing causes val error
var errorEntries = context.GetValidationErrors();
}
मैं IValidatableObject जो हमेशा विफल से कंपनी के लिए एक प्रमाणीकरण त्रुटि है, लेकिन कुछ भी नहीं मिलता है।
कोई विचार क्यों?
यूप यह है। यदि कोई अन्य सत्यापन त्रुटियां नहीं हैं तो IValidalidableObject कोड आग लगती है। यद्यपि इस व्यवहार के बारे में खुश नहीं है - यह उपयोगकर्ताओं को दिखाने वाली सभी त्रुटियों को दिखाने के लिए चूसने वाला नहीं है। –
@ रिक - मैं सहमत हूं। यह शायद समयपूर्व अनुकूलन का मामला है ... –