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:

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 Customizing Development Settings in Visual Studio.

Öffnen der ORDesignerWalkthrough-Projektmappe

So öffnen Sie die ORDesignerWalkthrough-Projektmappe

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

  1. Öffnen Sie im O/R-Designer die Datei Northwind.dbml.(Doppelklicken Sie im Projektmappen-Explorer auf die Datei Northwind.dbml).

  2. 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.

  3. Platzieren Sie den Cursor in der partiellen Order-Klasse.

  4. Für Visual Basic-Projekte:

    1. Erweitern Sie die Liste Methodenname (das Kombinationsfeld (Deklarationen)).

    2. Klicken Sie auf OnRequiredDateChanging.

    3. Der partiellen Order-Klasse wird eine OnRequiredDateChanging-Methode hinzugefügt.

    4. 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:

    1. 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

  1. Drücken Sie F5.

  2. Ä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.

  3. 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

  1. Öffnen Sie im Code-Editor Form1.

  2. Wählen Sie OrdersDataGridView aus.

  3. Erstellen Sie einen Ereignishandler für das DataError-Ereignis.

  4. 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 Aktualisierungen einer Entitätsklasse

Neben der Überprüfung von Werten während der Durchführung von Ä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

  1. Öffnen Sie im O/R-Designer die Datei Northwind.dbml.(Doppelklicken Sie im Projektmappen-Explorer auf die Datei Northwind.dbml).

  2. 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.

  3. Platzieren Sie den Cursor in der partiellen NorthwindDataset-Klasse.

  4. Für Visual Basic-Projekte:

    1. Erweitern Sie die Liste Methodenname (das Kombinationsfeld (Deklarationen)).

    2. Klicken Sie auf UpdateOrder.

    3. Der partiellen NorthwindDataContext-Klasse wird eine UpdateOrder-Methode hinzugefügt.

    4. 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:

    1. 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

  1. Drücken Sie F5.

  2. 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.

  3. Klicken Sie auf dem Formular auf die Schaltfläche Speichern.

    An diesem Punkt schlägt die Validierung fehl, und die Ausnahme wird ausgelöst.

  4. 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

LINQ to SQL-Abfragen

Weitere Ressourcen

Object Relational Designer (O/R-Designer)

LINQ to SQL [LINQ to SQL]

Neues in der Datenanwendungsentwicklung in Visual Studio 2012

LINQ to SQL Walkthroughs