web-dev-qa-db-ja.com

TransactionとTransactionScopeの違い

SQL Server 2005データベースと通信して、いくつかのストアドプロシージャを実行するアプリケーションを開発しています。私のクライアントは、すべてのトランザクションをSQL ServerではなくC#側で管理することを要求しているため、データベースにアクセスするときにSystem.Transactions.TransactionScopeを使用しています。しかし、System.Transactions.Transactionデータ型を見たばかりで、混乱しています...各タイプの主な長所/短所は何ですか?どちらを使うべきですか?

EnterpriseLibraryのDataAccess ApplicationBlockも使用する必要があることに注意してください。

14
User

Msdnから:

TransactionScopeクラスは、トランザクション自体と対話する必要なしに、コードのブロックをトランザクションに参加しているものとしてマークする簡単な方法を提供します。トランザクションスコープは、アンビエントトランザクションを自動的に選択して管理できます。使いやすさと効率性のため、トランザクションアプリケーションを開発するときはTransactionScopeクラスを使用することをお勧めします。 TransactionScopeをインスタンス化すると、トランザクションマネージャーが参加するトランザクションを決定します。決定されると、スコープは常にそのトランザクションに参加します。決定は、アンビエントトランザクションが存在するかどうかと、コンストラクターのTransactionScopeOptionパラメーターの値の2つの要因に基づいています。アンビエントトランザクションは、コードが実行されるトランザクションです。 Transactionクラスの静的なCurrentプロパティを呼び出すことにより、アンビエントトランザクションへの参照を取得できます。

あなたはここでそれについてもっと読むことができます:

http://msdn.Microsoft.com/en-us/library/ms172152(v = vs.90).aspx

http://msdn.Microsoft.com/en-us/library/system.transactions.transactionscope(v = vs.90).aspx

.NET 2.0でのトランザクションに関するすばらしい(少し古い)記事

http://msdn.Microsoft.com/en-us/library/ms973865.aspx

13
Tomasz Jaskuλa