Frage

Ich verwende Daten Anmerkungen Daten zu überprüfen, die eingegeben ist, aber ich bin fest, wenn es um Daten validieren, um mehr individuelle Weise kommt.

Ich brauche Abfragen gegen Datenbank auszuführen Sachen zu sehen, ob es existiert oder nicht, und dann auf Benutzer berichten, wenn ein „custom db-Check-Fehler“ erscheint, wie „Der Firmenname ist bereits vorhanden“

Wie kann ich implementieren, so etwas zusammen mit DataAnnotations?

Ich habe alle Abfragen gemacht usw. mit Linq und Entity Framework, das mit 3.5sp1 kommt

/ M

War es hilfreich?

Lösung

Benutzerdefinierte Attribute, die Daten Anmerkungen

erweitern

Sie müssen Ihre eigenen Attribute schreiben, die die Validierung Ihrer Objektinstanz gegen Datenspeicher tun wird.

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

public class MustNotExist: ValidationAttribute
{
    ...
}

Achtung

Ich habe in eine ähnliche Situation führen, wenn ich zur Validierung erforderlich, dass das Objekt innerhalb Datenspeicher eindeutig ist. Aber diese Art der Validierung war nicht möglich, auf der Entity-Klasse selbst, da es sollte nur Arbeit für jene Unternehmen, die geschaffen werden, aber nicht, wenn Sie zurückkommen Ihr Unternehmen aus dem Datenspeicher bereits.

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

public interface IExternalValidator ...

class DBUniqueValidator: IExternalValidator ...

class ValidateExternallyAttribute: FilterAttribute, IActionFilter
{
    ...
    public ValidateExternallyAttribute(Type validatorType, Type entityType) ...
    ...
}

Ich konnte auf Controller-Aktionen mein Attribut setzen, die Entity-Parameter erhalten. Filter action-Attribut überprüft dann Controller-Aktion Parameter (es kann leicht ihre Typen und Werte zugreifen) und läuft externe Validierer gegen korrekte Parameter (sofern Typen in Attributdefinition) und auffüllt Model Fehler bei der Überprüfung fehlschlägt.

[ValidateExternally(typeof(DBUniqueValidator), typeof(User))]
public ActionResult RegisterUser(User newUser)
{
    if (!this.ModelState.IsValid)
    {
        // act accordingly - probably return some error depending on model state errors
    }
    // register new user in data store
}

Auf diese Weise konnte ich externe Validierung läuft nur auf den Maßnahmen, die sie auch wirklich benötigt, und diese Technik auch meinen Controller-Aktionen Code halfen sauber und kurz zu bleiben. Alles, was ich hatte zu tun ist, um zu überprüfen, ob es irgendwelche Modellzustand Fehler sind.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top