5

私は現在、自分のビジネス エンティティに対して複数の挿入、更新、および削除を必要とするアプリケーションを作成しています。すべてのストアド プロシージャが 1 つの作業単位としてコミットまたはロールバックできることを保証するために、TransactionScope クラスを使用しています。

私の質問は、.NET クラス ライブラリで TransactionScope クラスを使用している場合、COMMIT TRAN と ROLLBACK TRAN も使用する必要があるということです。

4

4 に答える 4

8

いいえ、トランザクションに TransactionScope を使用する場合、明示的なトランザクションは必要ありませんが、接続文字列で設定する必要があることが重要です。Transaction Binding=Explicit Unbind;完全な詳細はこちらにありますが、そうしないと、最初のいくつかの操作がロールバックされ、最後のいくつかの操作がコミットされる (または、トランザクションの外部で実行される) ことになります。

于 2008-10-10T06:39:31.233 に答える
2

2005年には必要ありませんが、2000年には必要です。また、通常、トランザクションスコープを「使用中」ブロックに入れます。

2000年以前と2005年で使用すると、パフォーマンスの問題がいくつかあります.

こちらをご覧ください

ありがとう

于 2008-10-09T23:25:22.857 に答える
1

またはに参加している場合は、TransactionScopeまたはを使用して独自のローカル トランザクションを明示的に作成しないCommittableTransactionことを強くお勧めします。begin transactionSqlConnection.BeginTransaction

TransactionScope/CommittableTransactionは異なる「ファミリー」であり、begin transaction/とは相互に排他的ですSqlTransaction

したがって、私はサイフ・カーンに同意しません。System.Transactions が Sql 2000 でパフォーマンスの問題を抱えているのは事実なので、begin transaction代わりに SqlTransaction を使用することをお勧めします。ただし、それを行う場合は、TransactionScope/CommittableTransaction も使用しないでください。

ちなみに、Marc Gravell が説明した動作は .Net 4.0 で変更されました。Explicit Unbind を使用しない場合でも、一部のコマンドをロールバックして一部をコミットすることはできなくなりました。(ただし、古いバージョンでは Explicit Unbind を使用する必要があるという彼の意見は正しいです)。

于 2010-08-20T00:38:19.080 に答える
0

You shouldn't need to - it should be handled within the TransactionScope. It does depend a little bit as to exactly what you are doing and how you are handling transaction (explicit or implicit) More HERE

于 2008-10-09T23:20:37.250 に答える