この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 25346|答える: 2

[出典] C#におけるTransactionScopeの使用

[リンクをコピー]
掲載地 2017/04/10 10:16:25 | | | |
トランザクションスコープ

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コールを追加する必要があります。


最後にコードを添付してください!


添付はソースコードです:
観光客の皆さん、この投稿の隠された内容を見たい方は、どうぞ答える






先の:CREATE DATABASE文は複数文トランザクション内で許可されていません
次に:LinqのOrderByは動的場を支持する
 地主| 掲載地 2017/04/10 10:20:30 |
TransactionScopeクラスはネスト形式で使用可能で、ネスト形式で使いたい場合は、ネストされたトランザクションブロック内でTransactionScopeOptionパラメータを指定する必要があります。 デフォルトのパラメータは「必要」です。

ネストされたクラスTransactionScopeのTransactionScopeOptionがRequiredの場合、次の結果が見えます。彼らのトランザクションは同じIDを持っています。 さらに、真の成功は両方のTransactionScopeが完成したときにのみです。

TransactionScopeOptionをRequiresNewに設定すると、ネストされたトランザクションブロックと外側のトランザクションブロックは独立していて、互いに影響しません。

TransactionScopeOptionは、現在のブロックのトランザクションをキャンセルするために抑制(Suppress)に設定されており、これは一般的にほとんど使われません。
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com