2016-05-04 1 views
0

J'utilise TransactionScope dans la couche de données et pour éviter MSDTC, je garde une connexion ouverte jusqu'à la fin de la transaction. Je trouve cette approche problématique car elle maintient la connexion ouverte et occupée pour le processus de transaction complet. Les méthodes appelées depuis l'étendue de la transaction peuvent prendre plus de temps (peut être 1 min). J'ai donc modifié mon approche pour ne pas utiliser une seule connexion, mais ouvrir et fermer la connexion à la même base de données si nécessaire.TransactionScope: lorsque la connexion sera escaladée à MSDTC

Comme ceci:

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(); 
} 

Peut-on suggérer, si ce code peut encore dégénérer TransactionScope à MSDTC. L'objectif de ce changement est de garder la connexion ouverte pendant un minimum de temps.

Voyez-vous un inconvénient dans cette approche?

Répondre