Freigeben über


Aufgaben der Entwickler beim Überschreiben von Standardverhalten

LINQ to SQL erzwingt die folgenden Anforderungen nicht, aber das Verhalten ist nicht definiert, wenn diese Anforderungen nicht erfüllt werden.

  • Die überschreibende Methode darf SubmitChanges oder Attach nicht aufrufen. LINQ to SQL löst eine Ausnahme aus, wenn diese Methoden in einer Überschreibungsmethode aufgerufen werden.

  • Überschreibungsmethoden können nicht verwendet werden, um eine Transaktion zu beginnen, zu bestätigen oder zu stoppen. 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. Es wird erwartet, dass die Überschreibungsmethode eine ChangeConflictException auslöst, wenn ein Konflikt mit der vollständigen Parallelität auftritt. LINQ to SQL fängt diese Ausnahme ab, damit Sie die von SubmitChanges bereitgestellte SubmitChanges-Option ordnungsgemäß 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ärschlüssel), muss die Überschreibungsmethode InsertOrder() 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. Beispielsweise kann in der Update-Überschreibungsmethode nur das ExecuteDynamicUpdate aufgerufen werden. LINQ to SQL erkennt oder überprüft nicht, ob die aufgerufene dynamische Methode für den jeweiligen Vorgang gültig ist. Wird eine nicht anwendbare Methode aufgerufen (beispielsweise ExecuteDynamicDelete für ein zu aktualisierendes Objekt), sind die Ergebnisse undefiniert.

  • Schließlich wird von der überschreibenden Methode erwartet, dass die festgestellte Operation ausgeführt wird. Die Semantik von LINQ to SQL-Vorgängen (vorzeitiges Laden, verzögertes Laden und SubmitChanges) verlangt von den Überschreibungen, 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