データレイヤで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をエスカレートすることができた場合には、お勧めできます。 この変更の目的は、最小時間接続を開いたままにすることです。
このアプローチには何らかの欠点がありますか?