Transaktionsomfattning
TransactionScope är en klass i System.Transactions, som är en klass som följer med .NET-ramverket. Om TransactionScope släpps utan att anropa Complete-metoden (TransactionScope implementerar IDisposible-gränssnittet, att använda block rekommenderas), kommer den att anse operationen som misslyckad och rulla tillbaka exekveringen. TransactionScope är ett användbart API som hanterar transaktioner runt ('around' betyder att databaser som stödjer TransactionScope automatiskt kan hantera transaktioner), och de flesta vanliga databaser stödjer detta API, inklusive Microsofts egen MSSQL, förstås. Om du använder en databas eller något transaktionsrelaterat system som inte stöder TransactionScope kan du fortfarande använda interceptorn, men du måste modifiera din kod för att använda ett lämpligt API som stödjer transaktioner (t.ex. att använda BeginTransaction API för att hämta databasleverantörens implementation av IDbTransactions).
Ovan är ett anpassat undantag som jag medvetet lade till för att se om det kan rullas tillbaka normalt, och bilden nedan visar normal exekvering, utan undantag.
Att anropa TransactionScopes Complete-metod indikerar att transaktionen har genomförts framgångsrikt. Naturligtvis, om transaktionen alltid genomförs, behövs inte transaktionen. Anledningen till att det finns transaktioner är att lösa problemet med fel i flera operationer, och om det uppstår ett fel kommer det att rullas tillbaka igen. För att . .NET:s TransactionScope har inget explicit rollback-anrop, och den närmaste motsvarigheten är att använda Dispose-metoden. Om TransactionScope släpps innan Complete-metoden anropas, utför TransactionScope en rollback. Därför måste ett Dispose-anrop läggas till på transaktionsinterceptorns ansikte för att utföra rollbacken.
Slutligen, bifoga koden!
Bifogat är källkoden:Turister, om ni vill se det dolda innehållet i detta inlägg, snälla Svar
|