La solution la plus simple est de remplacer SaveChanges
sur la classe de vos entités. Vous pouvez attraper le DbEntityValidationException
de déballer les erreurs réelles et de créer une nouvelle DbEntityValidationException
avec le message amélioré.
- Créez une classe partielle à côté de votre fichier SomethingSomething.Context.cs.
- Utilisez le code au bas de cet article.
- C'est tout. Votre implémentation utilisera automatiquement le SaveChanges surchargé sans aucun travail de refactoring.
Votre message d'exception ressemblera maintenant à ceci :
System.Data.Entity.Validation.DbEntityValidationException : La validation a échoué pour une ou plusieurs entités. Voir la propriété 'EntityValidationErrors'. pour plus de détails. Les erreurs de validation sont les suivantes : Le champ PhoneNumber doit être une chaîne ou un tableau d'une longueur maximale de '12'. LastName est obligatoire.
Vous pouvez déposer la surcharge SaveChanges dans n'importe quelle classe qui hérite 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
contient également les entités qui ont causé les erreurs de validation. Ainsi, si vous avez besoin d'encore plus d'informations, vous pouvez modifier le code ci-dessus pour obtenir des informations sur ces entités.
Voir aussi : http://devillers.nl/improving-dbentityvalidationexception/