Freigeben über


Verantwortlichkeiten des Entwicklers beim Überschreiben des Standardverhaltens

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

  • Die überschreibende Methode darf weder SubmitChanges noch Attach aufrufen. LINQ to SQL löst eine Ausnahme aus, wenn diese Methoden in einer Außerkraftsetzungsmethode aufgerufen werden.

  • Überschreibungsmethoden können nicht verwendet werden, um eine Transaktion zu beginnen, zu bestätigen oder zu stoppen. Der SubmitChanges Vorgang wird unter einer Transaktion ausgeführt. Eine innere geschachtelte Transaktion kann die äußere Transaktion beeinträchtigen. 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 bereitgestellte SubmitChanges-Option auf SubmitChanges korrekt verarbeiten können.

  • Die Create (Insert) und Update Override-Methoden sollen die Werte für datenbankgenerierte Spalten bei erfolgreichem Abschluss der Operation an die entsprechenden Objektmitglieder zurückgeben.

    Wenn beispielsweise Order.OrderID einer Identitätsspalte (Autoincrement Primary Key) zugeordnet ist, muss die InsertOrder() Außerkraftsetzungsmethode die datenbankgenerierte ID abrufen und das Order.OrderID Element auf diese ID festlegen. Ebenso müssen Zeitstempelelemente auf die datenbankgenerierten Zeitstempelwerte aktualisiert werden, um sicherzustellen, dass die aktualisierten Objekte konsistent sind. Wenn die datenbankgenerierten Werte nicht weitergegeben werden, kann dies zu einer Inkonsistenz zwischen der Datenbank und den objekten führen, die von der DataContextDatenbank nachverfolgt werden.

  • Es liegt in der Verantwortung 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 dem entsprechenden Vorgang entspricht. Wenn eine nicht anwendbare Methode aufgerufen wird (z.B. ExecuteDynamicDelete für ein Objekt, das aktualisiert werden soll), sind die Ergebnisse nicht definiert.

  • 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