TransactionScope
TransactionScope je třída v System.Transactions, což je třída dodávaná s .NET frameworkem. Pokud je TransactionScope uvolněn bez volání metody Complete (TransactionScope implementuje rozhraní IDisposible, doporučuje se použití bloku), pak operace bude považována za neúspěšnou a vykonání se vrátí zpět. TransactionScope je užitečné API, které spravuje transakce ("around" znamená, že databáze podporující TransactionScope mohou transakce spravovat automaticky) a většina běžných databází toto API podporuje, včetně Microsoft vlastního MSSQL. Pokud používáte databázi nebo nějaký transakční systém, který TransactionScope nepodporuje, můžete interceptor stále použít, ale budete muset upravit svůj kód tak, aby používal vhodné API, které transakce podporuje (například pomocí BeginTransaction API pro získání implementace IDbTransactions od poskytovatele databáze).
Výše uvedená je vlastní výjimka, kterou jsem záměrně hodil, abych zjistil, jestli ji lze normálně vrátit zpět, a obrázek níže ukazuje normální provedení, bez výjimek.
Volání metody Complete v TransactionScope znamená, že transakce byla úspěšně provedena. Samozřejmě, pokud je transakce vždy provedena, není potřeba. Důvodem, proč existují transakce, je vyřešit problém selhání v několika operacích, a pokud k selhání dojde, bude vráceno zpět. Protože . V .NET TransactionScope není explicitní volání zpětného vracení a nejbližším ekvivalentem je použití metody Dispose. Pokud je TransactionScope uvolněn před vyvoláním metody Complete, TransactionScope provede rollback. Proto je třeba na přednost transakčního interceptoru přidat volání Dispose pro provedení rollbacku.
Nakonec přiložte kód!
Přiložen je zdrojový kód:Turisté, pokud chcete vidět skrytý obsah tohoto příspěvku, prosím Odpověď
|