У меня есть объект в простом тестовом сценарии, который использует EF Code First и реализует IValidatableObject. Там есть очень простая логика, которая добавляет ошибку проверки и возвращает ее обратно. На объекте есть и другие проверки.
Однако при сохранении объекта - пока работают проверки на основе атрибутов - интерфейс IValidatableObject никогда не срабатывает. Отладчик не входит в него, и ошибка никогда не появляется с вызовом 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, который должен ВСЕГДА терпеть неудачу.
Любая идея, почему?