Ich bin auf der Suche nach einer Lösung, um einige benutzerdefinierte Entität Validierung (die Datenbankzugriff, Cross-Member-Validierung erfordern würde), wenn der Benutzer seine Änderungen in einem dynamischen Daten Bildschirm speichert, mit Entity Framework.
Die Validierung ist komplexer als das, was ich mit den Attributen tun (es einen Zugriff auf die Datenbank benötigt, etc.)Benutzerdefinierte erweiterte Entität Validierung mit dynamischen Daten
Können Sie die Savechanges aufrufen abfangen?
Ich habe versucht, ValidateEntity
im DbContext-Objekt zu überschreiben, aber Dynamic Data scheint es nicht zu nennen (wahrscheinlich weil es den internen ObjectContext verwendet, nicht sicher warum), und das Überschreiben von SaveChanges hilft auch nicht.
Ich habe keine Veranstaltung sehen, dass ich abonnieren könnte ...
Die documentation soll helfen:
anpassen Validierung für ein einzelnes Datenfeld durch Überschreiben der OnValidate Methode oder die Handhabung des Validate-Ereignisses , die aufgerufen werden, wenn ein Datenfeld geändert wird. Mit diesem Ansatz können Sie die Validierung und Geschäftslogik für ein einzelnes Feld hinzufügen. Dieser Ansatz ist eher als das Hinzufügen der Validierung für ein einzelnes Feld. Es ist nützlich , wenn dieselbe Validierungslogik auf mehr als ein Datenfeld angewendet werden kann. Sie können auch Validierungsprüfungen durchführen, bei denen mehrere Felder enthalten.
Aber ich bin mit POCO Entity Framework 6 Klassen so gibt es keine OnValidate
Methode außer Kraft zu setzen, und von dem, was ich lese dies für LinqToSql ist, und ich kann das Validate
Ereignis nicht finden sie erwähnen.
Ich habe versucht, das SavingChanges
Ereignis der inneren ObjectContext
im Konstruktor meines DbContext zu abonnieren, die ValidateEntity
manuell zu nennen, aber ich weiß nicht, was mit dem Ergebnis zu tun. Wenn ich eine DbEntityValidationException
(oder eine ValidationException
wie in this article vorgeschlagen) werfen, behandeln ASPNET es wie jede Ausnahme (gelber Bildschirm).
Die Implementierung IValidatableObject
funktioniert auch nicht.
Ich habe auch versucht, meine eigene DynamicValidator
zu sehen, was passiert, aber ohne Erfolg, scheint es die Ausnahme zu behandeln (wenn ich ValidateException
überschreiben, und einen Haltepunkt setzen, sehe ich es) aber es ist immer noch bis zum Standard sprudeln Fehlerhandler und zeigt einen gelben Bildschirm an. Ich muss etwas verpassen.
Also, wie sollten Sie komplexe Validierung (Querfeld, mit Abfragen usw.) auf Entitäten vor dem Speichern in Dynamic Data/EF durchführen?
i mit dieser Aussage zustimmen, ich glaube auch, dass die Geschäftslogik nicht mit Entity Framework gekoppelt werden soll – Eldho
Es diskutierbar ist. Möglicherweise könnte ein Domain-Layer-Objekt stattdessen die Validierung haben. Solange das schreckliche Repository-Layer vor dem EF-Muster nicht verwendet wird ... – James
stimme ich zu, aber dynamische Daten gibt nicht viele Optionen für die Validierung. Aber das Problem ist nicht da, das Problem ist, dass DbValidationException nicht von DynamicValidator abgefangen wird (obwohl die Dokumente und Artikel, die ich finde, es sagen sollte), so bekomme ich einen gelben Bildschirm. Im Moment versuche ich nicht einmal, eine gute Architektur zu haben, nur um etwas zu haben, das funktioniert :(. –