Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 25346|Odpowiedź: 2

[Źródło] Wykorzystanie TransactionScope w C#

[Skopiuj link]
Opublikowano 10.04.2017 10:16:25 | | | |
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ź






Poprzedni:Instrukcja CREATE DATABASE nie jest dozwolona w transakcji wieloinstrukcyjnej
Następny:Spraw, by OrderBy Linqa wspierał pola dynamiczne
 Ziemianin| Opublikowano 10.04.2017 10:20:30 |
Klasa TransactionScope może być zagnieżdżona, a jeśli chcesz ją używać zagnieżdżonej, musisz określić parametr TransactionScopeOption w zagnieżdżonym bloku transakcji. Domyślny parametr to Wymagany.

Gdy wymagana jest opcja TransactionScopeOption zagnieżdżonej klasy TransactionScope, można zobaczyć następujący wynik: ich transakcje mają ten sam identyfikator. Co więcej, prawdziwy sukces jest tylko wtedy, gdy oba TransactionScopes są kompletne.

Jeśli ustawisz TransactionScopeOption na ReneedesNew, zagnieżdżone bloki transakcji i bloki zewnętrzne są niezależne i nie wpływają na siebie nawzajem.

OpcjaTransactionScopeOption jest ustawiona na Suppress, aby anulować transakcję aktualnego bloku, co jest zazwyczaj rzadko stosowane.
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com