Exemplarische Vorgehensweise: Anpassen des Einfüge-, Update- und Löschverhaltens von Entitätsklassen

Der Object Relational Designer (O/R-Designer) stellt eine visuelle Entwurfsoberfläche zum Erstellen und Bearbeiten von LINQ to SQL-Klassen (Entitätsklassen) bereit, die auf Objekten in einer Datenbank basieren. Mithilfe von LINQ to SQL kann die LINQ-Technologie für den Zugriff auf SQL-Datenbanken verwendet werden. Weitere Informationen finden Sie unter LINQ (Language-Integrated Query, sprachintegrierte Abfrage).

Standardmäßig wird die Logik für die Durchführung von Updates von der LINQ to SQL-Laufzeit bereitgestellt. Basierend auf dem Schema der Tabelle (den Spaltendefinitionen und den Primärschlüsselinformationen) werden von der Laufzeit Standardanweisungen für Einfüge-, Update- und Löschvorgänge erstellt. Wenn Sie das Standardverhalten nicht verwenden möchten, können Sie das Updateverhalten konfigurieren und für erforderliche Einfüge-, Update- und Löschvorgänge, die für das Arbeiten mit Daten in der Datenbank notwendig sind, spezielle gespeicherte Prozeduren festlegen. Diese Vorgehensweise ist auch dann sinnvoll, wenn kein Standardverhalten erzeugt wird, z. B. wenn die Entitätsklassen Ansichten zugeordnet sind. Das standardmäßige Updateverhalten kann auch dann überschrieben werden, wenn für die Datenbank der Tabellenzugriff über gespeicherte Prozeduren erforderlich ist. Weitere Informationen finden Sie unter Anpassen von Operationen durch Verwenden gespeicherter Prozeduren (LINQ to SQL).

Tipp

Für diese exemplarische Vorgehensweise ist die Verfügbarkeit der gespeicherten Prozeduren InsertCustomer, UpdateCustomer und DeleteCustomer für die Datenbank Northwind erforderlich. Ausführliche Informationen zum Erstellen dieser gespeicherten Prozeduren finden Sie unter Exemplarische Vorgehensweise: Erstellen von gespeicherten Prozeduren zum Aktualisieren der Northwind-Kundentabelle.

In dieser exemplarischen Vorgehensweise werden die zu befolgenden Schritte dargestellt, um mithilfe von gespeicherten Prozeduren das LINQ to SQL-Standardlaufzeitverhalten für das Speichern von Daten in einer Datenbank zu überschreiben.

In dieser exemplarischen Vorgehensweise wird gezeigt, wie Sie die folgenden Aufgaben ausführen:

  • Erstellen einer neuen Windows Forms-Anwendung und Hinzufügen einer LINQ to SQL-Datei.

  • Erstellen einer Entitätsklasse, die der Tabelle Customers der Datenbank Northwind zugeordnet ist.

  • Erstellen einer Objektdatenquelle, die auf die Customer-Klasse LINQ to SQL verweist.

  • Erstellen eines Windows Form, das eine DataGridView enthält, die an die Customer-Klasse gebunden ist.

  • Implementieren der Speicherfunktion für das Formular.

  • Erstellen von DataContext-Methoden durch Hinzufügen von gespeicherten Prozeduren zum O/R-Designer.

  • Konfigurieren der Customer-Klasse, sodass sie gespeicherte Prozeduren für Einfüge-, Update- und Löschvorgänge verwendet.

Vorbereitungsmaßnahmen

Zum Durchführen dieser exemplarischen Vorgehensweise benötigen Sie Folgendes:

Erstellen einer Anwendung und Hinzufügen von LINQ to SQL-Klassen

Da Sie mit LINQ to SQL-Klassen arbeiten und die Daten in einem Windows Form angezeigt werden, erstellen Sie eine neue Windows Forms-Anwendung, und fügen Sie eine LINQ to SQL-Klassendatei hinzu.

Tipp

Ihr Computer zeigt möglicherweise für einige der Elemente der Visual Studio-Benutzeroberfläche in der folgenden Anleitung andere Namen oder Standorte an. Diese Elemente sind von der jeweiligen Visual Studio-Version und den verwendeten Einstellungen abhängig. Weitere Informationen finden Sie unter Visual Studio-Einstellungen.

So erstellen Sie ein neues Windows-Anwendungsprojekt, das LINQ to SQL-Klassen enthält

  1. Erstellen Sie im Menü Datei ein neues Projekt.

  2. Nennen Sie das Projekt UpdatingwithSProcsWalkthrough.

    Tipp

    Der O/R-Designer wird in Visual Basic- und C#-Projekten unterstützt. Erstellen Sie das neue Projekt daher in einer der beiden Sprachen.

  3. Klicken Sie auf die Vorlage Windows Forms-Anwendung und anschließend auf OK. Weitere Informationen finden Sie unter Erstellen von Windows-basierten Anwendungen.

    Das Projekt UpdatingwithSProcsWalkthrough wird erstellt und zum Projektmappen-Explorer hinzugefügt.

  4. Klicken Sie im Menü Projekt auf Neues Element hinzufügen.

  5. Klicken Sie auf die Vorlage LINQ to SQL-Klassen, und geben Sie im Feld Name den Namen "Northwind.dbml" ein.

  6. Klicken Sie auf Hinzufügen.

    Dem Projekt wird eine leere LINQ to SQL-Klassendatei (Northwind.dbml) hinzugefügt, und der O/R-Designer wird geöffnet.

Erstellen der Entitätsklasse Customer und einer Objektdatenquelle

Erstellen Sie LINQ to SQL-Klassen, die den Datenbanktabellen zugeordnet sind, indem Sie Tabellen von Server-Explorer/Datenbank-Explorer auf O/R-Designer ziehen. Sie erhalten LINQ to SQL-Entitätsklassen, die den Tabellen in der Datenbank zugeordnet sind. Nachdem die Entitätsklassen erstellt wurden, können sie wie andere Klassen mit öffentlichen Eigenschaften als Objektdatenquellen dienen.

So erstellen Sie eine Customer-Entitätsklasse und konfigurieren damit eine Datenquelle

  1. Suchen Sie im Server-Explorer/Datenbank-Explorer in der SQL Server-Version der Beispieldatenbank Northwind die Tabelle Customer. Weitere Informationen finden Sie unter Gewusst wie: Erstellen einer Datenverbindung mit der Northwind-Datenbank.

  2. Ziehen Sie den Knoten Customers von Server-Explorer/Datenbank-Explorer auf die O/R-Designer-Oberfläche.

    Eine Entitätsklasse mit dem Namen Customer wird erstellt. Sie verfügt über Eigenschaften, die den Spalten in der Tabelle Customers entsprechen. Die Entitätsklasse wird Customer (nicht Customers) genannt, da sie einem einzelnen Kunden aus der Tabelle Customers entspricht.

    Tipp

    Dieses Umbenennungsverhalten wird als Pluralisierung bezeichnet. Es kann im Dialogfeld "Optionen" (Visual Studio) an- oder ausgeschaltet werden. Weitere Informationen finden Sie unter Vorgehensweise: An- und Ausschalten der Pluralisierung (O/R-Designer).

  3. Klicken Sie im Menü Erstellen auf UpdatingwithSProcsWalkthrough erstellen, um das Projekt zu erstellen.

  4. Klicken Sie im Menü Daten auf Datenquellen anzeigen.

  5. Klicken Sie im Datenquellenfenster auf Neue Datenquelle hinzufügen.

  6. Klicken Sie auf der Seite Datenquellentyp auswählen auf Objekt und anschließend auf Weiter.

  7. Erweitern Sie den Knoten UpdatingwithSProcsWalkthrough, suchen Sie die Klasse Customer, und wählen Sie diese aus.

    Tipp

    Wenn die Klasse Customer nicht verfügbar ist, beenden Sie den Assistenten, erstellen Sie das Projekt, und führen Sie den Assistenten erneut aus.

  8. Klicken Sie auf Fertig stellen, um die Datenquelle zu erstellen, und fügen Sie die Entitätsklasse Customer zum Fenster Datenquellen hinzu.

Erstellen einer DataGridView, um die Kundendaten auf einem Windows Form anzuzeigen

Erstellen Sie Steuerelemente, die an Entitätsklassen gebunden sind, indem Sie LINQ to SQL-Datenquellenelemente vom Fenster Datenquellen auf ein Windows Form ziehen.

So fügen Sie Steuerelemente hinzu, die an Entitätsklassen gebunden sind

  1. Öffnen Sie Form1 in der Entwurfsansicht.

  2. Ziehen Sie aus dem Fenster Datenquellen den Knoten Customer auf Form1.

    Tipp

    Klicken Sie im Menü Daten auf Datenquellen anzeigen, um das Fenster Datenquellen anzuzeigen.

  3. Öffnen Sie Form1 im Code-Editor.

  4. Fügen Sie dem Formular den folgenden Code hinzu, sodass er global für das Formular gilt und außerhalb einer bestimmten Methode, jedoch innerhalb der Klasse Form1 steht:

    Private NorthwindDataContext1 As New NorthwindDataContext
    
    private NorthwindDataContext northwindDataContext1
        = new NorthwindDataContext();
    
  5. Erstellen Sie einen Ereignishandler für das Form_Load-Ereignis, und fügen Sie dem Handler den folgenden Code hinzu:

    CustomerBindingSource.DataSource = NorthwindDataContext1.Customers
    
    customerBindingSource.DataSource
        = northwindDataContext1.Customers;
    

Implementieren der Speicherfunktionalität

Die Schaltfläche zum Speichern ist standardmäßig nicht aktiviert, und die Speicherfunktionalität ist nicht implementiert. Auch wird bei Erstellung datengebundener Steuerelemente für Objektdatenquellen nicht automatisch Code hinzugefügt, um geänderte Daten in der Datenbank zu speichern. In diesem Abschnitt wird erklärt, wie die Schaltfläche zum Speichern aktiviert und die Speicherfunktionalität für LINQ to SQL-Objekte implementiert wird.

So implementieren Sie die Speicherfunktionalität

  1. Öffnen Sie Form1 in der Entwurfsansicht.

  2. Wählen Sie im CustomersBindingNavigator die Schaltfläche zum Speichern (die Schaltfläche mit dem Diskettensymbol) aus.

  3. Legen Sie im Fenster Eigenschaften die Eigenschaft Aktiviert auf True fest.

  4. Doppelklicken Sie auf die Schaltfläche zum Speichern, um einen Ereignishandler zu erstellen und zum Code-Editor zu wechseln.

  5. Fügen Sie dem Ereignishandler für die Speichern-Schaltfläche den folgenden Code hinzu:

    NorthwindDataContext1.SubmitChanges()
    
    northwindDataContext1.SubmitChanges();
    

Überschreiben des Standardverhaltens für Updates (Einfügungen, Updates und Löschungen)

So überschreiben Sie das standardmäßige Updateverhalten

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

  2. Erweitern Sie im Server-Explorer/Datenbank-Explorer den Knoten Gespeicherte Prozeduren der Datenbank Northwind, und suchen Sie die gespeicherten Prozeduren InsertCustomers, UpdateCustomers und DeleteCustomers.

  3. Ziehen Sie alle drei gespeicherten Prozeduren auf den O/R-Designer.

    Die gespeicherten Prozeduren werden dem Methodenbereich als DataContext-Methoden hinzugefügt. Weitere Informationen finden Sie unter DataContext-Methoden (O/R-Designer).

  4. Wählen Sie im O/R-Designer die Entitätsklasse Customer aus.

  5. Wählen Sie im Fenster Eigenschaften die Einfügen-Eigenschaft aus.

  6. Klicken Sie auf die Auslassungszeichen (...) neben Laufzeit verwenden, um das Dialogfeld Verhalten konfigurieren zu öffnen.

  7. Wählen Sie Anpassen aus.

  8. Wählen Sie aus der Liste Anpassen die InsertCustomers-Methode aus.

  9. Klicken Sie auf Übernehmen, um die Konfiguration für die ausgewählte Klasse und das ausgewählte Verhalten zu speichern.

    Tipp

    Sie können mit der Konfiguration des Verhaltens jeder Klasse/Verhalten-Kombination fortfahren, solange Sie nach jeder Änderung auf Übernehmen klicken. Wenn Sie eine Klasse oder ein Verhalten ändern bevor Sie auf Übernehmen klicken, wird ein Warnungsdialogfeld angezeigt, das Ihnen Gelegenheit bietet, alle Änderungen zu übernehmen.

  10. Wählen Sie aus der Liste Verhalten die Option Aktualisieren aus.

  11. Wählen Sie Anpassen aus.

  12. Wählen Sie in der Liste Anpassen die UpdateCustomers-Methode aus.

    Überprüfen Sie die Liste der Methodenargumente und Klasseneigenschaften, und beachten Sie, dass für einige Spalten in der Tabelle zwei Methodenargumente sowie zwei Klasseneigenschaften vorhanden sind. Dies macht es einfacher, Änderungen zu verfolgen und Anweisungen zur Überprüfung von Parallelitätsverletzungen zu erstellen.

  13. Ordnen Sie das Original_CustomerID-Methodenargument der Klasseneigenschaft CustomerID (Original) zu.

    Tipp

    Standardmäßig werden Methodenargumente Klasseneigenschaften zugeordnet, wenn die Namen übereinstimmen. Wenn Eigenschaftennamen geändert werden und die Namen von Tabelle und Entitätsklasse nicht mehr übereinstimmen, kann es erforderlich sein, die entsprechende zuzuordnende Klasseneigenschaft auszuwählen, wenn die korrekte Zuordnung vom O/R-Designer nicht festgestellt werden kann. Wenn die Methodenargumente nicht über gültige Klasseneigenschaften für die Zuordnung verfügen, können Sie zusätzlich den Wert Klasseneigenschaften auf (Keine) festlegen.

  14. Klicken Sie auf Übernehmen, um die Konfiguration für die ausgewählte Klasse und das ausgewählte Verhalten zu speichern.

  15. Wählen Sie aus der Liste Verhalten die Option Löschen aus.

  16. Wählen Sie Anpassen aus.

  17. Wählen Sie in der Liste Anpassen die DeleteCustomers-Methode aus.

  18. Ordnen Sie das Original_CustomerID-Methodenargument der Klasseneigenschaft CustomerID (Original) zu.

  19. Klicken Sie auf OK.

Tipp

Auch wenn es kein Problem in dieser exemplarischen Vorgehensweise darstellt, ist Folgendes zu beachten: LINQ to SQL behandelt bei Einfüge- und Updatevorgängen die datenbankgenerierten Werte bei Identitätsspalten (automatische Inkrementierung) sowie bei ROWGUID- (datenbankgenerierte GUID) und Timestamp-Spalten automatisch. Datenbankgenerierte Werte in anderen Spaltentypen führen unerwartet zu einem NULL-Wert. Um die datenbankgenerierten Werte zurückzugeben, sollte manuell IsDbGenerated auf true und AutoSync auf eine der folgenden Einstellungen festgelegt werden: Always, OnInsert oder OnUpdate.

Testen der Anwendung

Führen Sie die Anwendung erneut aus, um zu überprüfen, ob der Kundendatensatz in der Datenbank von der gespeicherten Prozedur UpdateCustomers ordnungsgemäß aktualisiert wird.

So testen Sie die Anwendung

  1. Drücken Sie F5.

  2. Ändern Sie einen Datensatz im Raster, um das Updateverhalten zu testen.

  3. Fügen Sie einen neuen Datensatz hinzu, um das Einfügeverhalten zu testen.

  4. Klicken Sie auf die Speichern-Schaltfläche, um die Änderungen in der Datenbank zu speichern.

  5. Schließen Sie das Formular.

  6. Drücken Sie F5, und überprüfen Sie, ob der aktualisierte Datensatz und der neu eingefügte Datensatz erhalten bleiben.

  7. Löschen Sie den in Schritt 3 erstellten neuen Datensatz, um das Löschverhalten zu testen.

  8. Klicken Sie auf die Speichern-Schaltfläche, um die Änderungen zu übermitteln und den gelöschten Datensatz aus der Datenbank zu entfernen.

  9. Schließen Sie das Formular.

  10. Drücken Sie F5 und überprüfen Sie, ob der gelöschte Datensatz aus der Datenbank entfernt wurde.

    Tipp

    Wenn Ihre Anwendung SQL Server Express Edition verwendet, werden beim Drücken von F5 in Schritt 10 die Änderungen möglicherweise nicht angezeigt. Dies ist abhängig vom Wert der Eigenschaft Ins Ausgabeverzeichnis kopieren der Datenbankdatei. Weitere Informationen finden Sie unter Gewusst wie: Verwalten von lokalen Datendateien im Projekt.

Nächste Schritte

Je nach den Anforderungen Ihrer Anwendung sollten Sie nach dem Erstellen von LINQ to SQL-Entitätsklassen mehrere Schritte ausführen. Zu den möglichen Verbesserungen, die Sie an dieser Anwendung vornehmen können, gehören die folgenden:

Siehe auch

Aufgaben

Vorgehensweise: Zuweisen von gespeicherten Prozeduren zur Durchführung von Update-, Einfüge- und Löschvorgängen (O/R-Designer)

Konzepte

LINQ to SQL-Abfragen

DataContext-Methoden (O/R-Designer)

Neues in der Datenanwendungsentwicklung

Weitere Ressourcen

Object Relational Designer (O/R-Designer)

LINQ to SQL