La solución más fácil es anular SaveChanges
en su clase de entidades. Puede capturar DbEntityValidationException
, desenvolver los errores reales y crear uno nuevo DbEntityValidationException
con el mensaje mejorado.
- Cree una clase parcial al lado de su archivo SomethingSomething.Context.cs.
- Usa el código al final de esta publicación.
- Eso es. Su implementación utilizará automáticamente los SaveChanges reemplazados sin ningún trabajo de refactorización.
Su mensaje de excepción ahora se verá así:
System.Data.Entity.Validation.DbEntityValidationException: la validación falló para una o más entidades. Consulte la propiedad 'EntityValidationErrors' para obtener más detalles. Los errores de validación son: El campo PhoneNumber debe ser una cadena o tipo de matriz con una longitud máxima de '12'; El campo Apellido es obligatorio.
Puede descartar los SaveChanges anulados en cualquier clase que herede de 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);
}
}
}
El DbEntityValidationException
también contiene las entidades que causaron los errores de validación. Entonces, si necesita aún más información, puede cambiar el código anterior para generar información sobre estas entidades.
Ver también: http://devillers.nl/improving-dbentityvalidationexception/