<p>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.</p>
<p>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 :</p>
<pre><code class="lang-auto">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;
}
</code></pre>
<p><code>EntityValidationErrors</code> est une collection qui représente les entités qui n’ont pas pu être validées avec succès, et la collection interne <code>ValidationErrors</code> par entité est une liste d’erreurs au niveau des propriétés.</p>
<p>Ces messages de validation sont généralement suffisamment explicites pour trouver la source du problème.</p>
<p><strong>Modification</strong></p>
<p>Quelques légères améliorations :</p>
<p>La <em>valeur</em> de la propriété en cause peut être incluse dans la boucle interne comme ceci :</p>
<pre><code class="lang-auto"> 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);
}
</code></pre>
<p>Pendant le débogage, <code>Debug.Write</code> pourrait être préférable à <code>Console.WriteLine</code> car cela fonctionne dans tous les types d’applications, pas seulement les applications console (merci à <span class="mention">@Bart</span> pour sa remarque dans les commentaires ci-dessous).</p>
<p>Pour les applications web en production qui utilisent <strong>Elmah</strong> pour la journalisation des exceptions, il s’avè</p>
<p><em>(Réponse tronquée)</em></p>