Exemplarische Vorgehensweise: Hinzufügen von Validierung zu Entitätsklassen
Bei der Validierung von Daten wird überprüft, ob Werte, die in Datenobjekte eingegeben wurden, zusätzlich zu den bestehenden Regeln Ihrer Anwendung auch den Einschränkungen eines Objektschemas entsprechen. Durch das Überprüfen dieser Werte vor dem Senden von Updates der zugrunde liegenden Datenbank können Fehler und die potenzielle Anzahl von Roundtrips zwischen einer Anwendung und der Datenbank reduziert werden.
Der Object Relational Designer (O/R-Designer) stellt partielle Methoden bereit, mit denen der Benutzer den vom Designer generierten Code erweitern kann, der während des Eingebens, Aktualisierens und Löschens ganzer Entitäten oder während bzw. nach Änderungen einzelner Spalten ausgeführt wird.
Diese exemplarische Vorgehensweise enthält schrittweise Anleitungen für das Hinzufügen von Validierungen zu LINQ to SQL [LINQ to SQL]-Entitätsklassen und baut auf dem Thema Exemplarische Vorgehensweise: Erstellen von LINQ to SQL-Klassen (O/R-Designer) auf.
In dieser exemplarischen Vorgehensweise wird gezeigt, wie Sie die folgenden Aufgaben ausführen:
Hinzufügen von Validierung für Änderungen von Daten in einer bestimmten Spalte.
Hinzufügen von Validierung für Updates einer vollständigen Entität.
Vorbereitungsmaßnahmen
Zum Durchführen dieser exemplarischen Vorgehensweise benötigen Sie Folgendes:
Das in Exemplarische Vorgehensweise: Erstellen von LINQ to SQL-Klassen (O/R-Designer) erstellte Projekt.
Zugriff auf die Beispieldatenbank Northwind. Weitere Informationen finden Sie unter Gewusst wie: Installieren von Beispieldatenbanken.
Hinweis
Auf Ihrem Computer werden möglicherweise andere Namen oder Speicherorte für die Benutzeroberflächenelemente von Visual Studio angezeigt als die in den folgenden Anweisungen aufgeführten. Diese Elemente sind von der jeweiligen Visual Studio-Version und den verwendeten Einstellungen abhängig. Weitere Informationen finden Sie unter Anpassen der Entwicklungseinstellungen in Visual Studio.
Öffnen der ORDesignerWalkthrough-Projektmappe
So öffnen Sie die ORDesignerWalkthrough-Projektmappe
Zeigen Sie im Menü Datei auf Öffnen, klicken Sie auf Projekt/Projektmappe, und navigieren Sie dann zum Speicherort der Datei ORDesignerWalkthrough.sln.
Hinweis
Die Datei ORDesignerWalkthrough.sln wird im Thema Exemplarische Vorgehensweise: Erstellen von LINQ to SQL-Klassen (O/R-Designer) erstellt und ist zum Durchführen dieser exemplarischen Vorgehensweise erforderlich.Befolgen Sie die Anweisungen im Thema Exemplarische Vorgehensweise: Erstellen von LINQ to SQL-Klassen (O/R-Designer), und speichern Sie abschließend die Projektmappe, wenn Sie dies nicht bereits getan haben.
Hinzufügen von Validierungen bei Werteänderungen in einer bestimmten Spalte
In diesem Teil der exemplarischen Vorgehensweise fügen Sie der Spalte RequiredDate einer Bestellung eine Validierungslogik hinzu. Sie fügen Code hinzu, um überprüfen, dass das RequiredDate vor dem aktuellen Datum liegt. Da die Validierung in der eigentlichen Klassendefinition (nicht auf der Benutzeroberfläche) ausgeführt wird, wird eine Ausnahme ausgelöst, wenn die Validierung des Werts fehlschlägt.
So validieren Sie Daten während einer Änderung eines Spaltenwerts
Öffnen Sie im O/R-Designer die Datei Northwind.dbml. (Doppelklicken Sie im Projektmappen-Explorer auf die Datei Northwind.dbml).
Da Sie dem RequiredDate einer Bestellung Validierung hinzufügen möchten, klicken Sie im Designer mit der rechten Maustaste auf die Order-Klasse und klicken auf Code anzeigen.
Der Code-Editor öffnet sich mit einer partiellen Klasse für die Bestellung.
Platzieren Sie den Cursor in der partiellen Order-Klasse.
Für Visual Basic-Projekte:
Erweitern Sie die Liste Methodenname (das Kombinationsfeld (Deklarationen)).
Klicken Sie auf OnRequiredDateChanging.
Der partiellen Order-Klasse wird eine OnRequiredDateChanging-Methode hinzugefügt.
Fügen Sie in der OnRequiredDataChanging-Methode den folgenden Code ein, um sicherzustellen, dass der für RequiredDate eingegebene Wert nicht vor dem aktuellen Datum liegt:
If value.HasValue Then If value < Today Then Throw New Exception("Required Date cannot be in the past") End If End If
Für C#-Projekte:
Fügen Sie in der partiellen Order-Klasse den folgenden Code ein, um sicherzustellen, dass der für RequiredDate eingegebene Wert nicht vor dem aktuellen Datum liegt:
partial void OnRequiredDateChanging(System.DateTime? value) { if (value < System.DateTime.Today) { throw new System.Exception("Required Date cannot be in the past"); } }
Testen der Anwendung
Zum Testen der Validierungslogik muss die Anwendung ausgeführt werden, und es müssen Werte eingegeben werden, die das Fehlschlagen der Validierung bewirken.
So testen Sie die Anwendung
Drücken Sie F5.
Ändern Sie in dem Raster, in dem die Bestellungen angezeigt werden, das RequiredDate einer Bestellung in ein Datum vor dem aktuellen, und navigieren Sie aus dem Datensatz, um die Änderung zu übernehmen.
Der neue Wert bewirkt, dass die Validierung fehlschlägt, und die Ausnahme wird wie erwartet ausgelöst.
Schließen Sie das Formular. (Den Debugvorgang beenden.)
Behandeln des Validierungsfehlers in der DataGridView
Der Test der Anwendung führte zu einer Fehlermeldung von DataGridView, die Entwickler anweist, das DataError-Ereignis zu behandeln. In der folgenden Anleitung wird die Behandlung dieses Ereignisses gezeigt.
So behandeln Sie den Validierungsfehler in DataGridView
Öffnen Sie im Code-Editor Form1.
Wählen Sie OrdersDataGridView aus.
Erstellen Sie einen Ereignishandler für das DataError-Ereignis.
Fügen Sie Code hinzu, um den Fehler anzuzeigen. Der Ereignishandler sieht folgendermaßen aus:
Private Sub OrdersDataGridView_DataError(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewDataErrorEventArgs) Handles OrdersDataGridView.DataError MessageBox.Show(e.Exception.Message) End Sub
private void dataGridView1_DataError(object sender, DataGridViewDataErrorEventArgs e) { MessageBox.Show(e.Exception.Message); }
Hinzufügen von Validierungen für Updates zu einer Entitätsklasse
Neben der Überprüfung von Werten während Änderungen, können Sie auch Daten validieren, wenn eine vollständige Entitätsklasse aktualisiert werden soll. Die Validierung während eines versuchten Updates ermöglicht Ihnen, Werte in mehreren Spalten zu vergleichen, wenn die Geschäftsregeln dies erfordern. In der folgenden Anleitung wird beispielsweise gezeigt, wie Sie sicherstellen, dass das richtige Transportunternehmen beauftragt wird, wenn die Frachtkosten unterhalb einer festgelegten Grenze liegen.
So validieren Sie Daten während eines Updates einer Entitätsklasse
Öffnen Sie im O/R-Designer die Datei Northwind.dbml. (Doppelklicken Sie im Projektmappen-Explorer auf die Datei Northwind.dbml).
Da Sie dem Update einer vollständigen Order-Klasse eine Validierung hinzufügen möchten, befinden sich die partiellen Methoden, auf die Sie zugreifen müssen, in der generierten DataContext-Klasse (NorthwindDataContext). Klicken Sie mit der rechten Maustaste in einen leeren Bereich auf dem O/R-Designer, und klicken Sie auf Code anzeigen.
Der Code-Editor wird in der partiellen Klasse für den NorthwindDataContext geöffnet.
Platzieren Sie den Cursor in der partiellen NorthwindDataset-Klasse.
Für Visual Basic-Projekte:
Erweitern Sie die Liste Methodenname (das Kombinationsfeld (Deklarationen)).
Klicken Sie auf UpdateOrder.
Der partiellen NorthwindDataContext-Klasse wird eine UpdateOrder-Methode hinzugefügt.
Federal Shipping liefert nicht, wenn der Wert Freight kleiner als 10 ist. Fügen Sie deshalb innerhalb der "UpdateOrder"-Methode den folgenden Code ein, um sicherzustellen, dass der für ShipVia eingegebene Wert nicht Federal Shipping ist, wenn der Wert für Freight kleiner als 10 ist:
If (instance.ShipVia = 3) And (instance.Freight < 10) Then Dim ErrorMessage As String = "Federal Shipping " & _ "does not deliver for less than 10. " & _ "You must use a different shipper." Throw New Exception(ErrorMessage) End If
Für C#-Projekte:
Fügen Sie der partiellen NorthwindDataContext-Klasse den folgenden Code hinzu, um sicherzustellen, dass der für ShipVia eingegebene Wert nicht Federal Shipping ist, wenn der Wert für Freight kleiner als 10 ist:
partial void UpdateOrder(Order instance) { if ((instance.ShipVia == 3) && (instance.Freight < 10)) { string ErrorMessage = "Federal Shipping " + "does not deliver for less than 10. " + "You must use a different shipper."; throw new System.Exception(ErrorMessage); } }
Testen der Anwendung
Zum Testen der Validierungslogik führen Sie die Anwendung aus und geben Werte ein, die ein Fehlschlagen der Validierung zur Folge haben.
So testen Sie die Anwendung
Drücken Sie F5.
Suchen Sie im Raster, in dem die Bestellungen angezeigt werden, einen Eintrag, dessen ShipVia-Wert 3 ist. Ändern Sie den Wert für Freight auf 5, und navigieren Sie aus dem Datensatz, um die Änderung zu übernehmen.
Da die Validierung erst ausgeführt wird, wenn der Eintrag tatsächlich für das Update übermittelt wird, schlägt die Validierung noch nicht fehl.
Klicken Sie auf dem Formular auf die Schaltfläche Speichern.
An diesem Punkt schlägt die Validierung fehl, und die Ausnahme wird ausgelöst.
Schließen Sie das Formular. (Den Debugvorgang beenden.)
Nächste Schritte
Abhängig von den Anforderungen Ihrer Anwendung sollten Sie mehrere Schritte ausführen, wenn Sie den LINQ to SQL-Entitätsklassen eine Validierung hinzugefügt haben. Sie können an dieser Anwendung die folgenden Verbesserungen vornehmen:
- Erstellen von weiteren LINQ-Abfragen zum Sortieren und Filtern der Daten. Weitere Informationen finden Sie unter LINQ to SQL-Abfragen.
Siehe auch
Aufgaben
Exemplarische Vorgehensweise: Erstellen von LINQ to SQL-Klassen (O/R-Designer)
Konzepte
Weitere Ressourcen
Object Relational Designer (O/R-Designer)
Neues in der Datenanwendungsentwicklung in Visual Studio 2012