トランザクションスコープ
TransactionScopeはSystem.Transactionsのクラスで、.NETフレームワークに付属するクラスです。 Completeメソッドを呼び出さずにTransactionScopeを解放した場合(TransactionScopeはIDisposibleインターフェースを実装しており、ブロック使用が推奨されます)、その操作は失敗とみなされ、実行をロールバックします。 TransactionScopeはトランザクションを管理する便利なAPIで(「around」とは、TransactionScopeをサポートするデータベースが自動的にトランザクションを管理できるという意味です)、ほとんどの主流データベースはこのAPIをサポートしています。もちろんMicrosoftのMSSQLも含めてです。 TransactionScopeをサポートしていないデータベースやトランザクション関連システムを使っている場合でも、インターセプターは使えますが、トランザクションをサポートする適切なAPIを使えるようにコードを修正する必要があります(例:BeginTransaction APIを使ってデータベースプロバイダーのIDbTransactions実装を取得するなど)。
上記はカスタム例外で、通常ロールバックできるか試すために意図的に投げ入れたもので、下の写真は例外なしの通常実行です。
TransactionScopeのCompleteメソッドを呼び出すと、トランザクションが正常に実行されたことを示します。 もちろん、トランザクションが常に実行されるなら、トランザクションは不要です。 トランザクションが存在する理由は、複数の操作での失敗問題を解決するためであり、失敗があればロールバックされます。 なぜなら、 .NETのTransactionScopeには明示的なロールバックコールはなく、最も近い対応はDisposeメソッドを使うことです。 Completeメソッドが呼び出される前にTransactionScopeが解放された場合、TransactionScopeはロールバックを実行します。 したがって、ロールバックを実行するためにトランザクションインターセプタの面にDisposコールを追加する必要があります。
最後にコードを添付してください!
添付はソースコードです:観光客の皆さん、この投稿の隠された内容を見たい方は、どうぞ 答える
|