Sie sind hier: Startseite | Wissen

Was ist System.Transactions?

System.Transactions (System.Transactions.dll) ist ein neuer Namensraum ab der FCL 2.0. Zentrale Funk-tionen sind:

Wichtigste Klassen

TransactionManager
Transaction

Wichtigste Schnittstellen

ITransaction
ICommitableTransaction
ITransactionManager

Implizite Transaktionen mit TransactionScope

Implizite Transaktionen sind eine neue, elegante Möglichkeit, eine Transaktion zu nutzen. Nach der Instan-ziierung der Klasse System.Transactions.TransactionScope werden alle folgenden ADO.NET-Befehle automatisch in den MSDTC integriert (automatisches Enlistment). Die Transaktion gilt so lange, bis die Complete()-Methode auf dem TransactionScope-Objekt aufgerufen wird. Die Transaktion wird automatisch zurückgesetzt, falls eine Ausnahme erzeugt wird.

  public long Buchung(long PS_ID, long FL_ID)
  {
   // --- Beginn der Transaktion
   System.Transactions.TransactionScope tx = new System.Transactions.TransactionScope();
   // --- Verarbeitung kann jetzt beginnen...
   long RestPlaetze = 0;
   RestPlaetze = Buche(PS_ID, FL_ID);
   // --- Transaktion abschließen
   tx.Complete();
   // --- Transaktionsobjekt verwerfen
   tx.Dispose();
   return RestPlaetze;
  }

Durch den Einsatz des using-Befehls kann der vorherige Code noch eleganter formuliert werden.

  public long Buchung2(long PS_ID, long FL_ID)
  {
   using (System.Transactions.TransactionScope tx = new System.Transactions.TransactionScope())
   {
   // -- Verarbeitung kann jetzt beginnen...
   long RestPlaetze = 0;
   RestPlaetze = Buche(PS_ID, FL_ID);
   tx.Complete();
   return RestPlaetze;
   }
  }

Mit der Klasse TransactionScope können Transaktionen auch verschachtelt werden. Wenn innerhalb eines Blocks, der eine TransactionScope-Instanz besitzt, eine weitere Instanz von TransactionScope erzeugt wird, muss durch den Parameter TransactionScopeOption das Verhältnis der Transaktionen spezifiziert werden. Mögliche Werte sind Required, RequiresNew und Suppress.

.NET-Klassen als Teilnehmer von Transaktionen

System.Transactions ermöglicht es auch, eine .NET-Klasse in eine MSDTC-Transaktion einzubinden bzw. eine Transaktion in einer .NET-Klasse zu beginnen und erst später in den MSDTC aufzunehmen. .NET-Klassen bilden soge-nannte volatile Ressourcen, die einen Neustart des Prozesses nicht überstehen. Datenbanktransaktionen sind im Gegensatz dazu dauerhafte Transaktionen (Durable Transactions).
Eine .NET-Klasse, die eine volatile Ressource im Rahmen einer Transaktion bilden möchte, muss die Schnitt-stelle IEnlistmentNotification mit den Methoden Prepare(), Commit(), Rollback() und InDoubt() unterstützen.

Beratung & Support:

Schulungen zu diesem Thema:

 Anfrage für eine individuelle Schulung zum Thema System.Transactions  Gesamter Schulungsthemenkatalog