2013-01-04 15 views
33

Zawsze chcę spróbować użyć TransactionScope, ale nie mogę pojąć, co ludzie widzą na ten temat. Więc weźmy przykład:Jak poprawnie używać usługi TransactionScope?

using(TransactionScope tran = new TransactionScope()) { 
    CallAMethodThatDoesSomeWork1(); 
    CallAMethodThatDoesSomeWork2(); 
    tran.Complete(); 
} 

tak więc najbardziej podstawowe pytanie: Jak mogę napisać „CallAMethodThatDoesSomeWork1()” tak, że nie wie, jak się toczyć swoje działania z powrotem, jeśli powiedzmy „CallAMethodThatDoesSomeWork2()” zgłasza wyjątek?

+2

Tak, to jest podstawowe pytanie: –

+3

duplikat http://stackoverflow.com/questions/5265841/how-to-create-a-class-thatwork- with-- transactioncope? rq = 1? – Fabske

+1

@Fabske - tam nie ma odpowiedzi – Denis

Odpowiedz

20

Kod w wywołanych metodach musi być świadomy transakcji i zostać zarejestrowany w aktywnej transakcji. Oznacza to tworzenie lub używanie klas, które są menedżerami zasobów (zobacz Implement Your Own Resource Manager.

Dokonujesz tego, implementując IEnlistmentNotification i rejestrując transakcję. Gdy transakcja zostanie zakończona, menedżer transakcji wywoła metody zdefiniowane w tym interfejsie, aby kod może wykonać/cofnąć pracę:

+0

Och, rozumiem, jak to zrobić. Życzę stronie MSDN dla "TransactionScope" powiedział - patrzyłem na to i zupełnie nigdy nie widziałem punktu TransactionScope. To jest magiczny interfejs aby to działało. To ma sens! – Denis