La validation a échoué pour une ou plusieurs entités. Consultez la propriété 'EntityValidationErrors' pour plus de détails

La validation a échoué pour une ou plusieurs entités. Consultez la propriété ‘EntityValidationErrors’ pour plus de détails

Pour être honnête, je ne sais pas comment vérifier le contenu des erreurs de validation. Visual Studio me montre que c’est un tableau avec 8 objets, donc 8 erreurs de validation.

En fait, vous devriez voir les erreurs si vous explorez ce tableau dans Visual Studio pendant le débogage. Mais vous pouvez également capturer l’exception et écrire les erreurs vers un stockage de journalisation ou la console :

try
{
    // Your code...
    // Could also be before try if you know the exception occurs in SaveChanges

    context.SaveChanges();
}
catch (DbEntityValidationException e)
{
    foreach (var eve in e.EntityValidationErrors)
    {
        Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
            eve.Entry.Entity.GetType().Name, eve.Entry.State);
        foreach (var ve in eve.ValidationErrors)
        {
            Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"",
                ve.PropertyName, ve.ErrorMessage);
        }
    }
    throw;
}

EntityValidationErrors est une collection qui représente les entités qui n’ont pas pu être validées avec succès, et la collection interne ValidationErrors par entité est une liste d’erreurs au niveau des propriétés.

Ces messages de validation sont généralement suffisamment explicites pour trouver la source du problème.

Modification

Quelques légères améliorations :

La valeur de la propriété en cause peut être incluse dans la boucle interne comme ceci :

        foreach (var ve in eve.ValidationErrors)
        {
            Console.WriteLine("- Property: \"{0}\", Value: \"{1}\", Error: \"{2}\"",
                ve.PropertyName,
                eve.Entry.CurrentValues.GetValue<object>(ve.PropertyName),
                ve.ErrorMessage);
        }

Pendant le débogage, Debug.Write pourrait être préférable à Console.WriteLine car cela fonctionne dans tous les types d’applications, pas seulement les applications console (merci à @Bart pour sa remarque dans les commentaires ci-dessous).

Pour les applications web en production qui utilisent Elmah pour la journalisation des exceptions, il s’avè

(Réponse tronquée)