가장 쉬운 해결책은 SaveChanges
엔터티 클래스 에서 재정의 하는 것입니다. 을 포착하고 DbEntityValidationException
실제 오류를 풀고 DbEntityValidationException
개선 된 메시지 로 새 메시지를 작성할 수 있습니다 .
- SomethingSomething.Context.cs 파일 옆에 부분 클래스를 작성하십시오.
- 이 게시물의 맨 아래에있는 코드를 사용하십시오.
- 그게 다야. 구현시 리팩터링 작업없이 재정의 된 SaveChanges를 자동으로 사용합니다.
예외 메시지는 이제 다음과 같습니다.
System.Data.Entity.Validation.DbEntityValidationException : 하나 이상의 엔티티에 대한 유효성 검증에 실패했습니다. 자세한 내용은 'EntityValidationErrors'속성을 참조하십시오. 유효성 검사 오류는 다음과 같습니다. PhoneNumber 필드는 최대 길이가 '12'인 문자열 또는 배열 유형이어야합니다. 성 필드는 필수입니다.
다음에서 상속되는 모든 클래스에서 재정의 된 SaveChanges를 삭제할 수 있습니다 DbContext
.
public partial class SomethingSomethingEntities
{
public override int SaveChanges()
{
try
{
return base.SaveChanges();
}
catch (DbEntityValidationException ex)
{
// Retrieve the error messages as a list of strings.
var errorMessages = ex.EntityValidationErrors
.SelectMany(x => x.ValidationErrors)
.Select(x => x.ErrorMessage);
// Join the list to a single string.
var fullErrorMessage = string.Join("; ", errorMessages);
// Combine the original exception message with the new one.
var exceptionMessage = string.Concat(ex.Message, " The validation errors are: ", fullErrorMessage);
// Throw a new DbEntityValidationException with the improved exception message.
throw new DbEntityValidationException(exceptionMessage, ex.EntityValidationErrors);
}
}
}
는 DbEntityValidationException
또한 유효성 검사 오류를 발생시킨 개체가 포함되어 있습니다. 따라서 더 많은 정보가 필요한 경우 위 코드를 변경하여 해당 엔티티에 대한 정보를 출력 할 수 있습니다.
참조 : http://devillers.nl/improving-dbentityvalidationexception/