Aufgaben des Entwicklers beim Überschreiben des Standardverhaltens (LINQ to SQL)
Aktualisiert: November 2007
LINQ to SQL erzwingt die folgenden Anforderungen nicht, aber das Verhalten ist nicht definiert, wenn diese Anforderungen nicht erfüllt werden.
Die Methode zum Überschreiben darf SubmitChanges oder Attach nicht aufrufen. LINQ to SQL löst eine Ausnahme aus, wenn diese Methoden auf diese Weise aufgerufen werden.
Überschreibungsmethoden können nicht verwendet werden, um eine Transaktion zu beginnen, zu stoppen oder ein Commit auszuführen. Die SubmitChanges-Operation wird im Rahmen einer Transaktion durchgeführt. Eine innere verschachtelte Transaktion kann die äußere Transaktion behindern. Methoden zum Überschreiben eines Ladevorgangs können eine Transaktion nur starten, wenn ermittelt wurde, dass die Operation nicht in einer Transaction erfolgt.
Von Methoden zum Überschreiben wird erwartet, dass sie die jeweilige Zuordnung vollständiger Parallelität einhalten. Die Methode zum Überschreiben führt zu einer ChangeConflictException, wenn ein Konflikt bei der vollständigen Parallelität entsteht. LINQ to SQL fängt diese Ausnahme so ab, dass Sie die SubmitChanges-Option von SubmitChanges korrekt verarbeiten können.
Die Erstellungsmethode (Insert) und die Update-Überschreibungsmethode müssen die Werte für in der Datenbank erzeugte Spalten wieder an die entsprechenden Objektmember zurückgeben, wenn die Operation erfolgreich abgeschlossen wird.
Wird beispielsweise Order.OrderID einer Identitätsspalte zugeordnet (autoincrement für den primären Schlüssel), muss die InsertOrder()-Methode die in der Datenbank erzeugte ID abrufen und den Order.OrderID-Member auf diese ID festlegen. In gleicher Weise müssen Timestampmember mit den in der Datenbank erzeugten Timestampwerten aktualisiert werden, um sicherzustellen, dass die aktualisierten Objekte konsistent sind. Ein Fehler bei der Weiterleitung der in der Datenbank erstellten Werte kann zu einer Inkonsistenz zwischen der Datenbank und den vom DataContext verfolgten Objekten führen.
Es ist Aufgabe des Benutzers, die richtige dynamische API aufzurufen. Bei Verwendung der Update-Überschreibungsmethode kann beispielsweise nur ExecuteDynamicUpdate aufgerufen werden. LINQ to SQL erkennt bzw. prüft nicht, ob die aufgerufene dynamische Methode mit der anwendbaren Operation übereinstimmt. Wird eine nicht anwendbare Methode aufgerufen (beispielsweise ExecuteDynamicDelete für ein zu aktualisierendes Objekt), sind die Ergebnisse undefiniert.
Von der überschreibenden Methode wird außerdem erwartet, dass die festgestellte Operation ausgeführt wird. Die Semantik von LINQ to SQL-Operationen (direktes Laden, verzögertes Laden und SubmitChanges) setzt voraus, dass der angegebene Dienst bereitgestellt wird. Wird beispielsweise beim Überschreiben eines Ladevorgangs nur eine leere Auflistung zurückgegeben, ohne den Inhalt der Datenbank zu prüfen, kann dies zu inkonsistenten Daten führen.
Siehe auch
Weitere Ressourcen
Anpassen von Insert-, Update- und Delete-Operationen (LINQ to SQL)