Ich habe zwei Transaktionsbereiche, einen innerhalb eines anderen. Ich würde gerne wissen, ob der innere Transaktionsbereich zurückgesetzt wird, nachdem er festgeschrieben wurde und der äußere Transaktionsbereich nicht abgeschlossen ist.Rollt sich ein innerer Transaktionsbereich zurück, wenn der äußere Transaktionsbereich nicht abgeschlossen wird?
Antwort
Da sie verschachtelt sind, wird die innere Transaktion zurückgesetzt.
Dies ist nicht die ganze Geschichte und hängt davon ab, wie Sie die verschachtelte Transaktion erstellen, aber standardmäßig wird ein Rollback ausgeführt.
This article geht in die Tiefe über TransactionScope
und sollte die meisten Ihrer Fragen beantworten.
Verteilte oder nicht ist irrelevant.
Es hängt von der Bereichsoption ab, mit der Sie den verschachtelten Transaktionsbereich mit starten.
Wenn Sie die Standardoption verwenden TransactionScopeOption.Required
dann die verschachtelten Bereich in derselben Transaktion wie der äußere Umfang gewinnen wird und als solche, wenn der äußere Umfang rollt der innere Umfang wieder wird auch wieder selbst gerollt werden, wenn es Complete
genannt hat.
Wenn Sie jedoch TransactionScopeOption.RequiresNew
verwenden, dann beginnt der verschachtelte Bereich seine eigene Transaktion und schließt sie separat vom äußeren Bereich ab, sodass er nicht zurückgesetzt wird, selbst wenn der äußere Bereich zurückgesetzt wird.
Wenn Sie TransactionScopeOption.Suppress
verwenden, dann wird der verschachtelte Bereich nicht an der äußeren Transaktion teilnehmen und nicht-transaktional abgeschlossen werden, daher nicht Teil der Arbeit, die zurückgesetzt würde, wenn die äußere Transaktion zurückgesetzt wird.
Perfekte Antwort :) –
- 1. Transaktionsbereich Attribut in VB.NET
- 2. Transaktionsbereich mit Entity
- 3. Benötigen Sie Hilfe bei Transaktionsbereich
- 4. Wie implementiert man einen Speicher Transaktionsbereich in C#?
- 5. Warum schlägt das Aufrufen der Volltextsuche in SQL Server 2008 fehl, wenn es sich im Transaktionsbereich befindet?
- 6. Datenzugriffsanwendung Block und Transaktionsbereich trennen Datenbankobjekte verwenden die gleiche Verbindung
- 7. PHP-Skript wird nicht beendet, wenn abgeschlossen
- 8. Java - Innerer Klassenkonstruktor - nur für die äußere Klasse erlaubt
- 9. Welche Rolle spielt die Spalte "IS CLOSED" im Transaktionsbereich von Magento?
- 10. log4Net RollingFileAppender "rollt" nicht
- 11. Wie kann ich den EF-Transaktionsbereich mit einem SQL-Befehl verwenden und beide nur dann committen, wenn beide erfolgreich sind?
- 12. MySQL: Warum innerer Join funktioniert und nicht äußere Join in der gleichen Syntax
- 13. EnvironmentEvent-Makro wird nicht abgeschlossen
- 14. Java FTP-Upload abgeschlossen aber nicht zurück
- 15. UIWebView rollt ruckelnd
- 16. Wie wird ein Befehl ausgeführt, wenn die Animation abgeschlossen ist?
- 17. Versprechen, das nicht abgeschlossen wird, wenn Edge mit Knoten
- 18. Wie man ein Update in PostgreSQL rollt
- 19. Spring @Transactional Annotation Eigenschaften Vorrang/Vererbung
- 20. UICollectionViewCell scrollt, wenn UITextView abgegriffen wird, blättern Sie nicht zurück, wenn Tastatur
- 21. Akka future.await kehrt nicht zurück, wenn es ein Zeitlimit gibt
- 22. HttpClient PostAsync-Aufruf in der Konsolenanwendung wird nicht abgeschlossen
- 23. PSExec wird nie abgeschlossen, wenn innerhalb von Start-Job ausgeführt
- 24. knex.js db Anruf wird nicht abgeschlossen
- 25. Wie Thread-Funktion in sich abgeschlossen
- 26. Innerer Glow-Effekt der Taste
- 27. XHR-Fortschrittsereignis wird nicht ausgelöst, bis der Upload abgeschlossen ist?
- 28. Box rollt nicht in Bullet Physics
- 29. Python-Multiprocessing: einige Funktionen kehren nicht zurück, wenn sie abgeschlossen sind (Queue-Material zu groß)
- 30. Angular2 EventEmitter wird nach dem Aufruf von .error nicht abgeschlossen
@Frantisek erwähnt verteilte Transaktionen. Woher weiß ich, dass ich eine verteilte Transaktion verwende? – Tebo
Ich vermute ich lag falsch. Mit TransactionScope brauchen Sie wahrscheinlich dtc nicht, damit es funktioniert. Lesen Sie hierzu http://msdn.microsoft.com/en-us/library/ms172152(v=vs.90).aspx: "Obwohl ein verschachtelter Bereich der Ambient-Transaktion des Root-Bereichs beitreten kann, ruft Complete im verschachtelten Bereich auf hat keinen Einfluss auf den Root-Bereich. Nur wenn alle Bereiche vom Root-Bereich bis zum letzten geschachtelten Bereich stimmen, um die Transaktion zu committen, wird die Transaktion festgeschrieben. " –
Ich bin mir sicher, dass Sie darüber Bescheid wissen, aber die Begriffe "innere Transaktion" und "verschachtelte Transaktion" sind IMHO unangemessen, wenn Sie über TransactionScope sprechen, da es eigentlich keine verschachtelten Transaktionen, sondern nur verschachtelte TransactionScopes gibt. Wenn Sie TransactionScopeOption.Required wählen, ist es nur eine große Transaktion und mit TransactionScopeOption.RequiresNew gibt es 2 völlig unabhängige Transaktionen, aber sie sind nicht verschachtelt im Sinne von (geschlossenen) verschachtelten Transaktionen. –