2011-01-04 3 views
1

Wir verwendeten DAAB für einige Legacy-Geschäftsobjekte und jetzt haben wir uns entschieden, TransactionScope für einige neue Geschäftsobjekte zu verwenden. Jetzt müssen wir das neue Geschäftsobjekt innerhalb des alten Business-Objekt-Codes aufrufen. Der alte Business-Objekt-Code würde wie folgt aussehen, wenn das neue Business-Objekt innerhalb sie genannt wird:TransactionScope mit einer DbTransaction, die vor dem Eingeben eines Bereichs erstellt wurde

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

Das neue Business-Objekt hat darin Code wie folgt:

using (TransactionScope scope = new TransactionScope()) 
{ 
    // do some update/insert 
    scope.Complete(); 
} 

Die Frage ist, dann ist dies zur Arbeit gehen?

Mein aktueller Überzeugung ist, dass es basierend auf funktionieren wird:

  1. dieser MSDN article die besagt, dass, wenn die Transaktion außerhalb den Umfang, die der Schöpfer der Transaktion verantwortlich ist noch erstellt wurde zu begehen/sie rollen zurück - das ist im Grunde mein Fall, es wird perfekt funktionieren, wenn das wahr ist.
  2. eine partielle Spur der Transaction auch zeigt, ergänze ich, dass ich verpflichtet, eine Festschreibung nicht unbedingt auf dispose von Transaction aber ich nicht vollständig die Spur beenden konnte, damit ich, wenn meine Spur genau war nicht 100% sicher bin

Es gibt jedoch ein paar Artikel über TransactionScope einschließlich this post on SO, die dieses Szenario nicht erwähnen und nur sagen, dass die Transaktion (en) zurückgesetzt werden, ohne anzugeben, ob die Transaktion von TransactionScope selbst erstellt wurde oder nicht.

Also meine Frage: Aus Ihrer Erfahrung, was ist der Fall?

a) Transaktion außerhalb der Transaction erstellt wird auf der dispose des Anwendungsbereichs begangen

OR

b) Transaktion außerhalb der Transaction erstellt wird nicht auf der begangen Entsorgung und der Schöpfer hat zu nehmen Pflege von Rollback & commit?

+0

Sie einfach diese und Variationen des Szenarios selbst testen können. –

Antwort

-1

Antwort ist B. Allerdings Sie sich merken müssen, Transaction an verteilten Systemebene erstellen Transaktion MSDTC mit, während DB-Transaktion auf DB erstellt

+1

Transaktionen werden bei Verwendung von TransactionScope nicht unbedingt auf MSDTC heraufgesetzt. –

Verwandte Themen