DbEntityValidationException - Wie kann ich leicht erkennen, was den Fehler verursacht hat?
Ich habe ein Projekt mit Entity Framework. Beim Aufruf SaveChanges
auf meine DbContext
bekomme ich folgende exception:
System.Daten.Entität.Die Validierung.DbEntityValidationException: Validierung
fehlgeschlagen für eine oder mehrere Entitäten. Siehe 'EntityValidationErrors' - Eigenschaft
für weitere details.
Dies ist alles schön und gut, aber ich will nicht, um einen debugger anfügen jedes mal, wenn diese Ausnahme Auftritt. Mehr über, in Produktionsumgebungen kann ich nicht einfach einen debugger Anhängen, so dass ich gehen auf große Längen zu reproduzieren diesen Fehler.
Wie kann ich sehen, die versteckte details in der DbEntityValidationException
?
InformationsquelleAutor der Frage Martin Devillers | 2013-04-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die einfachste Lösung ist das überschreiben
SaveChanges
auf Ihre Entitäten-Klasse. Sie können fangen dieDbEntityValidationException
, wickeln Sie die tatsächlichen Fehler und erstellen Sie eine neueDbEntityValidationException
mit der verbesserten Nachricht.Ihre Ausnahme-Nachricht wird nun wie folgt Aussehen:
Drop können Sie die überschriebene SaveChanges in jeder Klasse, die erbt von
DbContext
:Den
DbEntityValidationException
enthält auch die Personen, die die Validierung Fehler. Also, wenn Sie benötigen noch mehr Informationen, können Sie ändern Sie den obigen code zur Ausgabe von Informationen über diese Personen.Siehe auch: http://devillers.nl/improving-dbentityvalidationexception/
InformationsquelleAutor der Antwort Martin Devillers
Als Martin angegeben, weitere Informationen gibt es in der
DbEntityValidationResult
. Ich fand es hilfreich, um sowohl meine POCO-Klasse-name und name der Eigenschaft in jeder Nachricht, und wollte vermeiden, dass das schreiben eines benutzerdefiniertenErrorMessage
Attribute auf alle meine[Required]
tags nur für diese.Den folgenden tweak zu Martins code kümmerte sich um diese details für mich:
InformationsquelleAutor der Antwort Eric Hirst
Anzeigen
EntityValidationErrors
Sammlung, fügen Sie den folgenden Ausdruck in das überwachungsfenster.Ich bin mit visual studio 2013
InformationsquelleAutor der Antwort Shehab Fawzy
Während Sie in den debug-Modus in der
catch {...}
block öffnen Sie die "Schnellüberwachung" - Fenster (Strg+alt+f) und fügen Sie es:Wird diese ermöglichen es Ihnen, einen Drilldown in die
ValidationErrors
Baum. Es ist der einfachste Weg, den ich gefunden habe, erhalten Sie sofortigen Einblick in diese Fehler.Für Visual 2012+ - Benutzer interessieren sich nur für die erste Fehlermeldung und möglicherweise nicht über eine
catch
blockieren, können Sie auch tun:InformationsquelleAutor der Antwort GONeale
Schnell eine aussagekräftige Fehlermeldung, indem Sie den Fehler beim Debuggen:
Fügen Sie eine schnelle Uhr für:
Drill-down in EntityValidationErrors wie diese:
(Sammlung Element, z.B. [0]) > ValidationErrors > (Sammlung Element, z.B. [0]) > ErrorMessage
InformationsquelleAutor der Antwort Chris Halcrow
Tatsächlich, dies ist nur die Validierung Problem, EF überprüft, ob Sie der Person zunächst die Eigenschaften, bevor Sie änderungen an der Datenbank.
So, EF wird geprüft, ob die Eigenschaft value ist out of range, wie wenn Sie die Tabelle. Table_Column_UserName ist vom Datentyp varchar(20). Aber in EF, den Sie eingegeben haben einen Wert, der mehr als 20.
Oder, in anderen Fällen, wenn die Spalte nicht Null ist.
Also, bei der überprüfung, müssen Sie einen Wert fest, der nicht null-Spalte, egal, ob Sie gehen, um die änderung vorzunehmen.
Ich persönlich, wie die Leniel Macaferi Antwort. Es kann zeigen Ihnen die Details des validierungsprobleme
InformationsquelleAutor der Antwort Calvin
Denke ich, dass "Der tatsächliche Fehler bei der Validierung" können vertrauliche Informationen enthalten, und dies könnte der Grund sein, warum Microsoft wählte, um Sie in einem anderen Ort (Eigenschaften). Die Lösung markiert, hier ist praktisch, aber es sollte mit Vorsicht eingenommen werden.
Ich würde es bevorzugen, erstellen Sie eine extension-Methode. Weitere Gründe, die für diese:
InformationsquelleAutor der Antwort Luis Toapanta
Für Azure-Funktionen, die wir verwenden dieses einfache Erweiterung Microsoft.Extensions.Die Protokollierung.ILogger
und Beispiel für die Verwendung:
InformationsquelleAutor der Antwort Juri
Verwenden Sie try-block im code wie
Können Sie die details auch hier
http://mattrandle.me/viewing-entityvalidationerrors-in-visual-studio/
Die Validierung fehlgeschlagen ist, für eine oder mehrere Personen. Siehe 'EntityValidationErrors' - Eigenschaft für mehr details
http://blogs.infosupport.com/improving-dbentityvalidationexception/
InformationsquelleAutor der Antwort Atta H.