Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 25346|Răspunde: 2

[Sursă] Utilizarea TransactionScope în C#

[Copiază linkul]
Postat pe 10.04.2017 10:16:25 | | | |
TransactionScope

TransactionScope este o clasă în System.Transactions, care vine cu framework-ul .NET. Dacă TransactionScope este eliberat fără a chema metoda Complete (TransactionScope implementează interfața IDisposible, se recomandă folosirea blocului), atunci va considera operația ca fiind eșuată și va anula execuția.
TransactionScope este un API util care gestionează tranzacțiile în jurul ("în jur" înseamnă că bazele de date care suportă TransactionScope pot gestiona automat tranzacțiile), iar majoritatea bazelor de date mainstream suportă acest API, inclusiv, desigur, MSSQL-ul Microsoft.
Dacă folosești o bază de date sau un sistem legat de tranzacții care nu suportă TransactionScope, poți totuși folosi interceptorul, dar va trebui să modifici codul pentru a folosi un API potrivit care suportă tranzacții (de exemplu, folosind API-ul BeginTransaction pentru a obține implementarea IDbTransactions de către furnizorul de baze de date).



Cea de mai sus este o excepție personalizată pe care am aruncat-o intenționat pentru a vedea dacă poate fi anulată normal, iar imaginea de mai jos arată execuția normală, fără excepții.




Apelarea metodei Complete a TransactionScope indică faptul că tranzacția a fost executată cu succes. Desigur, dacă tranzacția este întotdeauna executată, atunci tranzacția nu este necesară. Motivul pentru care există tranzacții este pentru a rezolva problema eșecului în mai multe operații, iar dacă apare o defecțiune, aceasta va fi anulată.
Pentru că . .NET TransactionScope nu există un apel explicit de rollback, iar echivalentul cel mai apropiat este utilizarea metodei Dispose. Dacă TransactionScope este eliberat înainte ca metoda Complete să fie apelată, atunci TransactionScope efectuează o rollback. Prin urmare, trebuie adăugat un apel Dispose pe fața interceptorului tranzacțiilor pentru a efectua rollback-ul.


În final, atașează codul!


Atașat este codul sursă:
Turiști, dacă vreți să vedeți conținutul ascuns al acestei postări, vă rogRăspunde






Precedent:Instrucțiunea CREATE DATABASE nu este permisă într-o tranzacție cu mai multe instrucțiuni
Următor:Fă ca Linq's OrderBy să suporte câmpuri dinamice
 Proprietarul| Postat pe 10.04.2017 10:20:30 |
Clasa TransactionScope poate fi folosită nested, iar dacă vrei să o folosești nested, trebuie să specifici parametrul TransactionScopeOption în blocul de tranzacții imbricat. Parametrul implicit este Required.

Când TransactionScopeOption a clasei imbricate TransactionScope este Required, puteți vedea următorul rezultat: tranzacțiile lor au același ID. Mai mult, succesul este adevărat doar atunci când ambele TransactionScopes sunt complete.

Dacă setezi TransactionScopeOption pe RequiresNew, blocurile de tranzacții imbricate și blocurile de tranzacții externe sunt independente și nu se afectează reciproc.

TransactionScopeOption este setat pe Suppress pentru a anula tranzacția blocului curent, ceea ce este în general rar folosit.
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com