Arriver exact de l'erreur type de DbValidationException
J'ai la situation où je suis l'initialisation de mon modèle dans DatabaseInitializer() pour EF 4.1 et obtenir cette fâcheuse erreur "Validation failed for one or more entities. See 'EntityValidationErrors' property for more details."
Donc, je vais à ce EntityValidationErrors et il y a un champ {System.Data.Entity.Validation.DbEntityValidationResult}
qui me donne aucune information sur ce terrain, il n'a pas pu initialiser.
Est-il un moyen pour obtenir plus d'infos à propos de cette erreur?
Pour faire place nette:
Je sais comment fixer la longueur de la chaîne problème. Ce que je demande est de savoir comment puis-je obtenir le exacte du nom de champ que c'est de casser le modèle.
Vous devez vous connecter pour publier un commentaire.
Pendant que vous êtes en mode de débogage dans le
catch {...}
de blocage d'ouverture de la "espion express" de la fenêtre (ctrl+alt+q) et collez-y:Cela vous permettra de faire un trou dans le
ValidationErrors
arbre. C'est la façon la plus simple que j'ai trouvé pour obtenir instantanément un aperçu de ces erreurs.Pour Visual 2012+ les utilisateurs qui ne s'intéressent qu'à la première erreur et ne pourrait pas avoir une
catch
bloc, vous pouvez même le faire:ex
avec$exception
et obtenir le même résultat.ex
avec w/e votrecatch (Exception THIS)
estSystem.Linq.Enumerable.ToList(System.Linq.Enumerable.ToList(((System.Data.Entity.Validation.DbEntityValidationException)$exception).EntityValidationErrors)[0].ValidationErrors)[0].ErrorMessage
Vous pouvez essayer ce dans un bloc try/catch?
La meilleure solution, à mon avis, est de gérer ce type d'erreurs de manière centralisée.
il suffit d'ajouter cette méthode pour les principaux
DbContext
classe :Cela permettra de remplacer votre contexte
SaveChanges()
méthode et vous obtiendrez une liste séparée par des virgules contenant tous de l'entité des erreurs de validation.espère que cela est utile.
Bien, j'ai eu le même problème. Mon modèle travaillé bien en EF CTP5, mais a échoué à construire en 4.1 avec le même message d'erreur ""la Validation a échoué à une ou plusieurs entités" quand j'ai essayé de initalize il. J'ai compris que j'avais bien:
Puis dans les graines de la méthode dans surdéfini initialiseur, j'ai eu un peu long (environ 600 lettres) commentaire.
Je pense que le point est: en EF 4.1 vous ont pour définir les annotations de données explicitement dans certains cas. Pour moi, le réglage:
aidé. C'est bizarre depuis CTP5 avait pas de problèmes avec ça.
J'ai trouvé utile de créer un SaveChanges wrapper qui rend le EntityValidationErrors plus lisible:
puis changé "entités".SaveChanges()' à 'SaveChanges(entités)" dans l'ensemble de mon projet