2016-05-04 29 views
0

データレイヤでTransactionScopeを使用しています.MSDTCを回避するために、トランザクションスコープが完了するまで1つの接続を開いたままにします。 このアプローチは、接続を開いたままにして、完全なトランザクション処理のために占有するため、問題があることがわかりました。トランザクションスコープ内から呼び出されるメソッドには、時間がかかることがあります(1分です)。 したがって、必要に応じて1つの接続を使用せず、同じデータベースへのオープンおよびクローズ接続を使用するように変更しました。このようTransactionScope:接続がMSDTCにエスカレートされるとき

using (TransactionScope scope = new TransactionScope()) 
{ 
using (SqlConnection connection = new SqlConnection(connectionString)) 
{ 
    connection.Open(); 
    using(SqlCommand sqlc = new SqlCommand(statement, Connection, transaction)) 
    { 
     //Execute some commands 
    } 
    connection.Close(); 
} 
SomeLongRunningTask(); 
using (SqlConnection connection = new SqlConnection(connectionString)) 
{ 
    connection.Open(); 
    using(SqlCommand sqlc = new SqlCommand(statement, Connection, transaction)) 
    { 
     //Execute some commands 
    } 
    connection.Close(); 
} 
... 
... 
... 
scope.Complete(); 
} 

はいずれも、このコードはまだMSDTCへのTransactionScopeをエスカレートすることができた場合には、お勧めできます。 この変更の目的は、最小時間接続を開いたままにすることです。

このアプローチには何らかの欠点がありますか?

答えて

関連する問題