Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 25346|Odpověď: 2

[Zdroj] Použití TransactionScope v C#

[Kopírovat odkaz]
Zveřejněno 10.04.2017 10:16:25 | | | |
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ímOdpověď






Předchozí:Příkaz CREATE DATABASE není povolen v rámci vícepříkazové transakce
Další:Udělej Linqův OrderBy podporu dynamických polí
 Pronajímatel| Zveřejněno 10.04.2017 10:20:30 |
Třída TransactionScope může být vnořená, a pokud ji chcete použít vnořenou, musíte zadat parametr TransactionScopeOption v bloku vnořených transakcí. Výchozím parametrem je Povinné.

Když je vyžadována možnost TransactionScopeOption vnořené třídy TransactionScope, můžete vidět následující výsledek, jejich transakce mají stejné ID. Navíc je skutečný úspěch pouze tehdy, když jsou oba TransactionScopes kompletní.

Pokud nastavíte TransactionScopeOption na ReneedesNew, vnořené transakční bloky a vnější transakční bloky jsou nezávislé a navzájem se neovlivňují.

TransactionScopeOption je nastaven na Suppress pro zrušení transakce aktuálního bloku, což se obecně používá jen zřídka.
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com