TransactionScope
TransactionScope is een klasse in System.Transactions, een klasse die wordt geleverd met het .NET-framework. Als de TransactionScope wordt vrijgegeven zonder de Complete-methode aan te roepen (TransactionScope implementeert de IDisposible-interface, het gebruik van block wordt aanbevolen), dan zal het de operatie als mislukt beschouwen en de uitvoering terugdraaien. TransactionScope is een nuttige API die transacties beheert ("rond" betekent dat databases die TransactionScope ondersteunen automatisch transacties kunnen beheren), en de meeste reguliere databases ondersteunen deze API, waaronder natuurlijk Microsofts eigen MSSQL. Als je een database of een transactie-gerelateerd systeem gebruikt dat TransactionScope niet ondersteunt, kun je de interceptor nog steeds gebruiken, maar je zult je code moeten aanpassen om een geschikte API te gebruiken die transacties ondersteunt (bijvoorbeeld door de BeginTransaction API te gebruiken om de implementatie van IDbTransactions door de databaseprovider te krijgen).
Bovenstaande is een aangepaste uitzondering die ik bewust heb toegevoegd om te zien of het normaal kan worden teruggerold, en de onderstaande afbeelding toont normale uitvoering, zonder uitzonderingen.
Het aanroepen van de Complete-methode van TransactionScope geeft aan dat de transactie succesvol is uitgevoerd. Natuurlijk, als de transactie altijd wordt uitgevoerd, is de transactie niet nodig. De reden dat er transacties zijn, is om het probleem van uitval in meerdere operaties op te lossen, en als er een storing is, wordt deze teruggedraaid. Omdat de . In .NET's TransactionScope is er geen expliciete rollback-aanroep, en het dichtstbijzijnde equivalent is het gebruik van de Dispose-methode. Als de TransactionScope wordt vrijgegeven voordat de Complete-methode wordt aangeroepen, voert de TransactionScope een rollback uit. Daarom moet een Dispose-aanroep aan het transactie-interceptorvlak worden toegevoegd om de rollback uit te voeren.
Tot slot, voeg de code toe!
Bijgevoegd is de broncode:Toeristen, als jullie de verborgen inhoud van dit bericht willen zien, alsjeblieft Antwoord
|