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:
- 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.
- 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?
Sie einfach diese und Variationen des Szenarios selbst testen können. –