TransactionScope
TransactionScope to klasa w System.Transactions, która jest częścią frameworka .NET. Jeśli TransactionScope zostanie zwolniony bez wywoływania metody Complete (TransactionScope implementuje interfejs IDisposible, zaleca się użycie bloku), uzna operację za niepoważną i cofnie wykonanie. TransactionScope to przydatne API, które zarządza transakcjami wokół ("around" oznacza, że bazy danych obsługujące TransactionScope mogą automatycznie zarządzać transakcjami), a większość popularnych baz danych obsługuje to API, w tym oczywiście Microsoft MSSQL. Jeśli korzystasz z bazy danych lub systemu związanego z transakcjami, który nie obsługuje TransactionScope, nadal możesz korzystać z interceptora, ale będziesz musiał zmodyfikować kod, aby używać odpowiedniego API obsługującego transakcje (np. używając BeginTransaction API, aby uzyskać implementację IDbTransactions od dostawcy danych).
Powyższe to niestandardowy wyjątek, który celowo wrzuciłem, żeby sprawdzić, czy można go normalnie cofnąć, a zdjęcie poniżej pokazuje normalne wykonanie, bez wyjątków.
Wywołanie metody Complete w TransactionScope oznacza, że transakcja została pomyślnie wykonana. Oczywiście, jeśli transakcja jest zawsze wykonywana, to nie jest potrzebna. Powodem istnienia transakcji jest rozwiązanie problemu niepowodzeń w wielu operacjach, a jeśli do nich dojdzie, zostaną one cofnięte. Ponieważ . W TransactionScope w .NET nie ma jawnego wywołania rollback, a najbliższym odpowiednikiem jest użycie metody Dispose. Jeśli TransactionScope zostanie zwolniony przed wywołaniem metody Complete, TransactionScope wykonuje rollback. Dlatego do frontu przechwytującego transakcji należy dodać wywołanie Dispose, aby wykonać cofnięcie.
Na koniec, dołącz kod!
Załączony jest kod źródłowy:Turyści, jeśli chcecie zobaczyć ukrytą zawartość tego wpisu, proszę Odpowiedź
|