2011-01-04 6 views
1

従来のビジネスオブジェクトにはDAABを使用していましたが、新しいビジネスオブジェクトにはTransactionScopeを使用することに決めました。今度は、古いビジネスオブジェクトコード内で新しいビジネスオブジェクトを呼び出さなければなりません。新しいビジネス・オブジェクトは、その中に呼び出されたときに、古いビジネス・オブジェクト・コードは、次のようになります。スコープに入る前に作成されたDbTransactionを含むTransactionScope

Database db = DatabaseFactory.CreateDatabase(); 
// create connection instance 
DbConnection dbConnection = db.CreateConnection(); 
dbConnection.Open(); // open connection 
// create transaction instance & start the transaction 
DbTransaction dbTransaction = dbConnection.BeginTransaction(); 

// do some old business object insert/update 

// now call the new business object 
newBO.Update(); 

// commit transaction 
dbTransaction.Commit(); 

次のように新しいビジネス・オブジェクトは、その中にコードを持っています

using (TransactionScope scope = new TransactionScope()) 
{ 
    // do some update/insert 
    scope.Complete(); 
} 

質問は、このです仕事に行く?

私の現在の信念が、それはに基づいて動作することである。

  1. このMSDN articleトランザクションが範囲外を作成された場合、トランザクションの作成者は、それを転がす/まだコミットのために責任があると言っていました私の場合は基本的に、これが本当であれば完全に動作します。
  2. 私も完成のTransactionScopeの部分的なトレースは必ずしものTransactionScopeの処分にコミットされていないコミットことを示しているが、私は私のトレースが正確であった場合は100%ではわからないので、私は完全にトレースを完了できませんでした

しかし、this post on SOを含むTransactionScopeに関する記事はいくつかありますが、このシナリオは言及せず、トランザクションがTransactionScope自体によって作成されたかどうかを指定せずにロールバックされると言うだけです。

私の質問:あなたの経験からそうですか? TransactionScopeの外で作成

a)のトランザクションがでコミットされていないのTransactionScope外で作成スコープ

OR

b)は、取引の処分にコミットされて配置し、作成者が取ることがありますロールバックのケア&コミット?

+0

上に作成しながらTransactionScopeのは、MSDTCを使用して、分散システムレベルでトランザクションを作成し、覚えておく必要があります。 –

答えて

-1

回答はB.しかし、あなたはあなたが簡単にこのシナリオを自分のバリエーションをテストすることができDBトランザクションは、DB

+1

TransactionScopeを使用する場合、必ずしもトランザクションがMSDTCに昇格されるとは限りません。 –

関連する問題