9

Patrząc na niego I zweryfikowane że na przykład wartość O „Myint” nie jest rolledback w następującym scenariuszuCo robi TransactionScope naprawdę

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

    t.Rollback(); 
} 

Więc to dało mi do myślenia „robi TransactionScope wycofać tylko działań pokrewnych do bazy danych, czy są inne rzeczy, którymi może zarządzać Transakcja, a ja nie jestem tego znany? "

Odpowiedz

19

Bieżąca transakcja dotyczy tylko określonych obiektów, nazywane menedżerami zasobów. Obiekty te muszą implementować określone interfejsy, aby uczestniczyć w transakcji. Obiekt ADO.NET SqlConnection jest przykładem. Nie jest trudno stworzyć obiekt, który działa jako "Pamięć transakcyjna". Te obiekty nazywają się Volatile Resource Managers. Prostym przykładem jest here.

+0

Inny przykład: http://msdn.microsoft.com/en-gb/magazine/cc163688.aspx – Peter

+0

+1 za doskonałą odpowiedź –

-3

TransactionScope (i transakcje) są używane tylko do obsługi zapytań do bazy danych. Naprawdę nie ma sensu "wycofywać" zmian, które są utrzymywane tylko tymczasowo w międzyczasie (np. Twoja zmienna int).

+0

-1 To, co powiedziałeś, nie ma żadnego sensu ... co jeśli zapisałem tę wartość do pliku tekstowego? w takim razie wycofałoby się? – Leonardo

+0

Nie, miałem na myśli nietrwałe dane. Plik FileWriter miałby własny mechanizm zmiany "cofnięcia", nadal nie można używać TransactionScope. – crazylpfan