Ist es für mich möglich, die Transaktion Rollback nach dem Aufruf scope.complete()? Funktioniert geschachtelte Transaktion in diesem Fall? Gibt es noch andere Alternativen? Ich bin gezwungen, scope.complete hinzuzufügen, um MyService korrekt aufzurufen. Aber ich möchte die Transaktion am Ende zurücksetzen.Rollback die Transaktion nach dem Aufruf von transaction.complete()
Antwort
Sie können verschachtelte Bereiche haben. Alle Bereiche müssen abgeschlossen sein, damit die Transaktion abgeschlossen werden kann. Scope! = Transaktion.
So könnte der innere Bereich abgeschlossen werden und der äußere Umfang könnte Rollback. Das würde die Transaktion in Rollback versetzen.
Nein, so funktionieren Transaktionen nicht. Sobald Sie eine Transaktion abgeschlossen haben, wird dieser Bereich geschlossen und Sie können ihn nicht erneut an anderer Stelle verwenden. Sobald eine Transaktion abgeschlossen wurde, kann sie außerdem nicht zurückgesetzt werden.
Sie müssten beide Transaktionen in den gleichen Bereich legen, sodass Sie sie entweder vervollständigen oder zusammen wiederherstellen können.
Der "Durability" -Teil der ACID-Eigenschaften von Transaktionen lässt dies nicht zu. Transaktionen, für die ein Commit ausgeführt wurde, können nicht zurückgesetzt werden. Rufen Sie stattdessen die Methode "BillImportProxy.ImportPendingUtilityBills" aus demselben Transaktionsbereich auf.