Benutzerdefinierte Validierung mit Datenannotationen

8

Ich verwende Datenanmerkungen, um die Daten zu prüfen, die eingegeben werden, aber ich stehe fest, wenn es darum geht, Daten benutzerdefinierter zu validieren.

Ich muss Abfragen für die Datenbank ausführen, um zu sehen, ob sie vorhanden sind oder nicht, und dann an den Benutzer zurückmelden, wenn ein "benutzerdefinierter db-check-Fehler" erscheint, wie "Der Firmenname existiert bereits"

Wie kann ich sowas zusammen mit Datenannotationen implementieren?

Ich habe alle Anfragen erledigt usw. unter Verwendung von Linq und Entity Framework, das mit 3.5sp1 kommt

/ M

    
Lasse Edsvik 15.12.2009, 07:38
quelle

1 Antwort

12

Benutzerdefinierte Attribute, die Datenanmerkungen erweitern

Sie müssen Ihre eigenen Attribute schreiben, die die Validierung Ihrer Objektinstanz gegen den Datenspeicher durchführen.

Stellen Sie sicher, dass Ihre Klassen System.ComponentModel.DataAnnotations.ValidationAttribute class erben:

%Vor%

Vorsicht

Ich bin in eine ähnliche Situation geraten, als ich überprüfen musste, ob das Objekt innerhalb des Datenspeichers eindeutig ist. Diese Art der Validierung war jedoch für die Entitätsklasse selbst nicht möglich, da sie nur für die Entitäten funktionieren sollte, die gerade erstellt werden, aber nicht, wenn Sie Ihre Entität bereits aus dem Datenspeicher zurückgeben.

Meine Lösung war eine separate Schnittstelle, Klasse und Attribut.

%Vor%

Ich konnte mein Attribut auf Controller-Aktionen setzen, die Entity-Parameter erhalten. Das Filteraktionsattribut überprüft dann die Controlleraktionsparameter (es kann leicht auf ihre Typen und Werte zugreifen) und führt einen externen Validator mit den korrekten Parametern aus (angegebene Typen in der Attributdefinition) und füllt ModelState-Fehler, wenn die Validierung fehlschlägt.

%Vor%

Auf diese Weise konnte ich eine externe Validierung nur für die Aktionen ausführen, die sie tatsächlich benötigten, und diese Technik half auch meinem Controller-Aktionscode, sauber und kurz zu bleiben. Ich musste nur prüfen, ob es irgendwelche Fehler im Modellzustand gibt.

    
Robert Koritnik 15.12.2009, 12:28
quelle