9

Blick in verifiziert ich, dass zum Beispiel des Wert o „myInt“ rolledback wird nicht in dem folgende SzenarioWas eine Transaction tut wirklich tut

int myInt = 10; 
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew)) 
{ 
    myInt=20; 
    Transaction t = Transaction.Current; 

    t.Rollback(); 
} 

So wurde es mir zu denken „Hat eine Transaction nur Aktivitäten Rollback verwandte zur Datenbank? Oder gibt es noch andere Dinge, die die Transaktion verwalten kann und denen ich nicht bewusst bin? "

Antwort

19

Die aktuelle Transaktion betrifft nur bestimmte Objekte, die als Ressourcenmanager bezeichnet werden. Diese Objekte müssen spezifische Schnittstellen implementieren, um an der Transaktion teilnehmen zu können. Das ADO.NET-SqlConnection-Objekt ist ein Beispiel. Es ist nicht schwer, ein Objekt zu erstellen, das als "Transaktionsspeicher" funktioniert. Diese Objekte werden als flüchtige Ressourcenmanager bezeichnet. Ein einfaches Beispiel ist here.

+0

Ein anderes Beispiel: http://msdn.microsoft.com/en-gb/magazine/cc163688.aspx – Peter

+0

+1 für ausgezeichnete Antwort –

-3

TransactionScope (und Transactions) werden nur für die Verarbeitung von Datenbankabfragen verwendet. Es würde nicht wirklich Sinn machen, Änderungen, die nur temporär beibehalten werden (wie zB Ihre int-Variable), "zurückzusetzen".

+0

-1 Was Sie gesagt haben macht überhaupt keinen Sinn ... Was wäre, wenn ich diesen Wert in eine Textdatei speichern würde? würde es dann zurückrollen? – Leonardo

+0

Nein, ich meinte nicht persistente Daten. Ein FileWriter würde einen eigenen Mechanismus zum "Zurücksetzen" von Änderungen haben, Sie können TransactionScope immer noch nicht verwenden. – crazylpfan