Freigeben über


Verwalten von Transaktionen in Object Services (Entity Framework)

Object Services unterstützt die automatische Transaktionseintragung. Das heißt, dass im Objektkontext durchgeführte Aktivitäten, z. B. das Ausführen von Abfragen und das Speichern von Datenänderungen in der Datenquelle, in der Datenquelle isoliert werden können, indem der Vorgang im Rahmen einer System.Transactions-Transaktion durchgeführt wird. Transaktionen werden mit Object Services verwendet, um folgende Aufgaben durchzuführen:

  • Das Ausführen mehrerer, von einer hohen Konsistenz abhängiger Vorgänge in der Datenquelle, wie Abfragen, die einen erfolgreichen Abschluss von Objektänderungen erfordern.

  • Das Koordinieren von Änderungen im Objektkontext mit anderen verteilten Vorgängen, wie dem Senden einer E-Mail-Benachrichtigung oder dem Schreiben in eine Nachrichtenwarteschlange.

Transaktionen, die eine Eintragung zusätzlicher Ressourcen-Manager erfordern, werden als verteilte Transaktionen bezeichnet. Für verteilte Transaktionen wird ein verteilter Transaktionskoordinator (Distributed Transaction Coordinator, DTC) verwendet, um die für das Abschließen der Transaktion erforderlichen Ressourcen zu verwalten. Die Heraufstufung einer Transaktion zu einem DTC kann ein aufwändig einzurichtendes und abzuschließendes Verfahren sein. Einige Ressourcen-Manager (z. B. SQL Server 2005) unterstützen das Transaktionsprotokoll PSPE (Promotable Single Phase Enlistment). Daher kann ein Ressourcen-Manager über eine Transaktion verfügen, die später gegebenenfalls zur Verwaltung durch einen DTC heraufgestuft werden kann.

Weitere Informationen finden Sie in der MSDN Library unter Transaktionsverarbeitung.

Folgendes sollte bei der Verwendung von Transaktionen mit Object Services beachtet werden:

  • Nur Vorgänge in der Datenquelle sind transaktiv. An Objekten im Objektkontext vorgenommene Änderungen sind nicht transaktiv. Änderungen an Objekten im Kontext sind außerhalb des Transaktionsbereichs sichtbar.

  • Wenn eine aktuelle Transaktion vorhanden ist, und SaveChanges aufgerufen wird, wird diese Transaktion von Object Services für Vorgänge in der Datenquelle verwendet. Andernfalls wird für den Vorgang eine neue Transaktion erstellt. Transaktionen können mit EntityTransaction, Transaction oder TransactionScope definiert werden.

    NoteHinweis

    Zum Vornehmen von Eintragungen in einer vorhandenen Transaktion wird die Verbindung von Object Services möglicherweise beendet und erneut hergestellt.

  • Wenn in Object Services eine neue Transaktion für einen SaveChanges-Vorgang erstellt wird, werden Änderungen an Objekten im Objektkontext erst zugelassen, wenn die Transaktion abgeschlossen ist. Dies stellt sicher, dass der Zustand des Objektkontexts und der der Datenquelle konsistent sind.

  • Wenn Vorgänge in einer Transaktion erneut durchgeführt werden sollen, muss sichergestellt werden, dass der Zustand der Objekte im Kontext nicht vor Abschluss der Transaktion zurückgesetzt wird. Hierzu muss SaveChanges mit dem Wert false für den Parameter acceptChangesDuringSave und nach erfolgreichem Abschluss anderer Vorgänge in der Transaktion AcceptAllChanges aufgerufen werden. Weitere Informationen finden Sie unter Gewusst wie: Verwalten von Object Services-Transaktionen (Entity Framework).

  • Im Rahmen eines Wiederholungsvorgangs mit koordinierten Transaktionen können Sie SaveChanges ein zweites Mal aufrufen, ohne zuvor AcceptAllChanges aufzurufen. In diesem Fall wird in Object Services versucht, noch einmal die gleichen Änderungen für die Datenquelle zu übernehmen.

Siehe auch

Konzepte

EntityClient-Anbieter für das Entity Framework
Verwalten von Verbindungen in Object Services (Entity Framework)

Weitere Ressourcen

Verwalten des Objektkontexts (Entity Framework)