TransactionScope: Wenn die Verbindung zu MSDTC eskaliert wird

Ich verwende TransactionScope in der dataschicht und um MSDTC zu vermeiden Ich halte eine Verbindung offen, bis der Transaktionsbereich abgeschlossen ist. Ich finde, dieser Ansatz ist problematisch, da er die Verbindung offen hält und für den vollständigen Transaktionsvorgang besetzt ist. Methode, die innerhalb des Transaktionsbereichs aufgerufen wird, kann längere time dauern (kann 1 min) sein. Also habe ich meinen Ansatz geändert, um keine Verbindung zu verwenden, aber offen und enge Verbindung zu derselben database, wenn nötig.

So was:

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

Kann jemand vorschlagen, wenn dieser Code das TransactionScope noch zu MSDTC eskalieren kann. Ziel dieser Änderung ist es, die Verbindung für die minimale time zu öffnen.

Sehen Sie bei diesem Ansatz irgendwelche Nachteile?

Du solltest ok sein, denke ich so lange, wie du SQL 2K8 oder höher benutzt. Einfach nur nicht mehr öffnen, dass eine Verbindung zu einer time und nicht öffnen Sie die zweite Verbindung zu einem anderen server als die erste. Sehen Sie TransactionScope automatisch eskalieren auf MSDTC auf einigen Maschinen?