Ich habe die Situation, dass ich mein Modell in DatabaseInitializer () für EF 4.1 initialisiere und diesen nervigen Fehler "Validation failed for one or more entities. See 'EntityValidationErrors' property for more details."
erhalte. Ich gehe also zu diesem EntityValidationErrors und es gibt ein Feld, {System.Data.Entity.Validation.DbEntityValidationResult}
das mir überhaupt keine Informationen darüber gibt, welches Feld es nicht initialisieren konnte . Gibt es eine Möglichkeit, weitere Informationen zu diesem Fehler zu erhalten?
Um die Dinge zu klären:
Ich weiß, wie man das Problem mit der Stringlänge behebt. Ich frage, wie ich den genauen Feldnamen erhalte, der das Modell beschädigt.
ex
mit$exception
und das gleiche Ergebnis.ex
catch (Exception THIS)
System.Linq.Enumerable.ToList(System.Linq.Enumerable.ToList(((System.Data.Entity.Validation.DbEntityValidationException)$exception).EntityValidationErrors)[0].ValidationErrors)[0].ErrorMessage
Sie könnten dies in einem Try / Catch-Block versuchen?
quelle
Die beste Lösung ist meiner Meinung nach, diese Art von Fehlern zentral zu behandeln.
Fügen Sie diese Methode einfach der Hauptklasse hinzu
DbContext
:Dadurch wird die
SaveChanges()
Methode Ihres Kontexts überschrieben und Sie erhalten eine durch Kommas getrennte Liste mit allen Fehlern bei der Entitätsüberprüfung.hoffe das ist hilfreich.
quelle
Nun, ich hatte das gleiche Problem. Mein Modell funktionierte in EF CTP5 gut, konnte jedoch 4.1 nicht mit demselben Fehler "" Validierung für eine oder mehrere Entitäten fehlgeschlagen "erstellen, als ich versuchte, es zu initialisieren. Ich stellte fest, dass ich Eigenschaft hatte:
Dann hatte ich bei der Seed-Methode im überschriebenen Initialisierer einen ziemlich langen Kommentar (ungefähr 600 Buchstaben).
Ich denke , der Punkt ist: in EF 4.1 Sie haben zu Einstelldaten Anmerkungen explizit in einigen Fällen. Für mich Einstellung:
geholfen. Es ist komisch, da CTP5 damit keine Probleme hatte.
quelle
Ich fand es nützlich, einen SaveChanges-Wrapper zu erstellen, der die EntityValidationErrors besser lesbar macht:
und änderte dann 'entity.SaveChanges ()' in 'SaveChanges (entity)' in meinem gesamten Projekt
quelle
Ich weiß, dass es eine alte Frage ist, aber hier ist meine Antwort:
Wenn Sie zuerst Code verwenden, können Sie Ihre Fehlermeldungen auch mithilfe mehrerer Ressourcendateien globalisieren
Zum Beispiel habe ich diese zwei separaten Ressourcendateien, eine für Fehler und eine für Eigenschaftsnamen, und ich verwende sie wie folgt:
Wie Sie sehen, habe ich meine Fehlermeldungen einschließlich der Eigenschaftsnamen vollständig übersetzt, damit ich sie später im Benutzer verwenden kann, zum Beispiel:
quelle