2008-10-10 7 views
16

Ich mache mich bereit, ein neues Projekt zu starten, und ich habe das Entity Framework untersucht. Meine Frage ist, was ist die beste Strategie für die Validierung der Entitäten? Andere Projekte, an denen ich gearbeitet habe, haben Attribute für den Großteil der Validierung verwendet, aber offensichtlich ist dies im Entitätsrahmen nicht möglich. Ist dies der einzige Weg, die partiellen Methoden in den Property Settern zu behandeln? Alle Ratschläge werden sehr geschätzt.Entität Framework Validierung

Antwort

11

Ich habe das Entity-Framework zuvor noch nicht verwendet, aber eine schnelle Suche zeigt an, dass Sie mehrere Optionen haben.

1) Validate an einer anderen Schicht in der Anwendung

immer eine Option, ich dachte, ich würde es ausdrücklich es wegzuwerfen.

2) Haken in die OnChanged Ereignisse des Entity dann Validierung

wahrscheinlich spröde führen und wäre verwirrend/langsam nach werden, wenn Sie viele verschiedene Eigenschaften Dinge, die für jede Entität ändern können.

3) Implementieren Teil Methoden Eigenschaft zu validieren ändern

Nach this Post und this Durchlauf gibt es verfügbare Teilverfahren zur Validierung. Dies scheint Ihre beste Option zu sein, da es nicht sehr aufdringlich ist und Sie die gewünschte Validierung selektiv implementieren können.

Ich hoffe, dass hilft. Viel Glück.

+0

Wie unterscheiden sich # 2 und # 3? Die partiellen Methoden, die es generiert, sind die OnChanged-Ereignisse ... es sei denn, mir fehlt etwas. –

+0

Sie können Recht haben. Es ist lange her, dass ich EF überhaupt angeschaut habe. – smaclell

+3

Ich las # 2 und # 3 als Validierung auf Entitäts- bzw. Eigenschaftsebene. Diese beiden Strategien haben natürlich unterschiedliche Zwecke: Die Validierung auf Entitätsebene testet die Gültigkeit aller Eigenschaften zusammen (z. B. dass sich gegenseitig ausschließende Eigenschaften nicht beide gesetzt sind), wohingegen die Validierung auf Eigenschaftsebene nur den Inhalt einer einzelnen Eigenschaft bei a berücksichtigt Zeit (z. B. dass eine E-Mail-Adresse die richtige Form hat). – ladenedge

3

Wenn Sie ASP.NET MVC verwenden, können Sie den Validation Application Block oder System.ComponentModel.DataAnnotations verwenden. Die Artikel Using Data Annotations und Using Application Block zeigen, wie man sie mit Linq macht, aber die Verwendung mit Entity-Framework sollte ähnlich sein.

+0

Links scheinen veraltet zu sein? –

+0

Links repariert, Post bearbeitet - es ist nur in MVC anwendbar. Danke Jeff – Shimmy

6

In .NET 4 wird die Unterstützung für die Validierung in Entity-Framework sofort verfügbar sein.

Check out: http://blogs.msdn.com/adonet/archive/2010/01/13/introducing-the-portable-extensible-metadata.aspx

So arbeiten nicht zu hart zu komplex Validierungslogik Implementierung ...

+0

Seltsamerweise sind die PEM-Erweiterung und ihre Beispiele aus irgendeinem Grund nicht mehr über MSDN verfügbar. Ich würde einen aktualisierten Link lieben, wenn jemand einen hat! – ladenedge

+0

Ich hoffe, dass sie uns nicht zum Narren halten ... Ich denke, ich habe mich geirrt, als ich "Out-the-Box" gesagt habe, jetzt merke ich, dass es nur ein Addon ist. Es heißt, dass das Addon kann von http://visualstudiogallery.msdn.microsoft.com/en-us/e6467914-d48d-4075-8885-ce5a0dcb744d heruntergeladen werden, aber überprüfen Sie den Link, um zu sehen, dass es kaputt ist. – Shimmy

+0

Ich fand diesen Link in den Kommentaren http://code.msdn.microsoft.com/DesignerExtStartKit/Wiki/View.aspx?title=Home&version=3, hatte noch keine Zeit zur Kasse. – Shimmy

2

This Artikel beschreibt, wie Validation Application Block mit Entity Framework integrieren. Es könnte eine Hilfe sein.

0

Wenn Sie WPF oder Windows Forms verwenden, implementieren Sie möglicherweise die Schnittstelle IDataErrorInfo.

Die Booklibrary Beispielanwendung des WPF Application Framework (WAF) Projekt zeigt, wie durch die Entity Framework erstellt Einheiten validiert werden können.

1

Wir haben den Objektkontext und abfangen die Savechanges() -Methode

public abstract class ValidationObjectContext : ObjectContext{ 
    ... 

    public override int SaveChanges(SaveOptions options){ 
     ValidateEntities(); 
     return base.SaveChanges(options); 
    } 

} 

diese Weise die Validierung bis zur letzten Minute bleibt overrident bevor die Verbindungen hergestellt werden, aber nachdem Sie (erwartet) mit glücklich zu sein das Diagramm und bereit zum Festschreiben (im Gegensatz zu anderen Optionen für die Validierung bei jeder Änderung, da einige komplexe Regeln wie die, die wir haben, nur gültig sind, nachdem mehrere Eigenschaften festgelegt wurden.).Wir haben zwei Validierungsebenen, die Validierung von Basic-Property, Dinge wie String-Länge, NULL-Werte usw. Und Business-Logik-Validierung, die Regeln über mehrere Objekte überprüfen müssen, möglicherweise die Datenbank zu bestätigen.

0

Erwägen Sie die Implementierung von IValidatableObject in Ihren Entitäten.

Verwandte Themen