EF 코드 우선을 사용하고 IValidatableObject를 구현하는 간단한 테스트 시나리오에 개체가 있습니다. 유효성 검증 오류를 추가하고이를 리턴하는 아주 간단한 논리가 있습니다. 객체에 대한 다른 검증도 있습니다.EF 코드 첫 번째 : IValidatable 개체 유효성 검사 안 함
그러나 속성을 기반으로하는 유효성 검사가 작동하는 동안 개체를 저장할 때 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에서 ONE 검증 회사의 오류,하지만 아무것도 얻을.
왜 그런가?
그래, 맞아. 다른 유효성 검사 오류가 없으면 IValidatableObject 코드가 실행됩니다. 이 동작에 대해서는 만족스럽지 않습니다. 사용자에게 적용되는 모든 오류를 표시하지 않는 것이 좋습니다. –
@ 릭 - 동의합니다. 아마 조숙 한 최적화의 경우 일 것입니다 ... –