従来のビジネスオブジェクトには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();
}
質問は、このです仕事に行く?
私の現在の信念が、それはに基づいて動作することである。
- このMSDN articleトランザクションが範囲外を作成された場合、トランザクションの作成者は、それを転がす/まだコミットのために責任があると言っていました私の場合は基本的に、これが本当であれば完全に動作します。
- 私も完成のTransactionScopeの部分的なトレースは必ずしものTransactionScopeの処分にコミットされていないコミットことを示しているが、私は私のトレースが正確であった場合は100%ではわからないので、私は完全にトレースを完了できませんでした
しかし、this post on SOを含むTransactionScopeに関する記事はいくつかありますが、このシナリオは言及せず、トランザクションがTransactionScope自体によって作成されたかどうかを指定せずにロールバックされると言うだけです。
私の質問:あなたの経験からそうですか? TransactionScopeの外で作成
a)のトランザクションがでコミットされていないのTransactionScope外で作成スコープ
OR
b)は、取引の処分にコミットされて配置し、作成者が取ることがありますロールバックのケア&コミット?
上に作成しながらTransactionScopeのは、MSDTCを使用して、分散システムレベルでトランザクションを作成し、覚えておく必要があります。 –