Ich verwende EF 6 mit einer Azure Sql-Datenbank. Laut Microsoft werden vom Benutzer initiierte Transaktionen nicht unterstützt (siehe Ссылка )
Jetzt, mit EF 6, ist ExecuteSqlCommand
standardmäßig in eine Transaktion eingebunden:
Beginnend mit EF6 Database.ExecuteSqlCommand () wird standardmäßig den Befehl in eine Transaktion umbrechen, wenn eine nicht bereits vorhanden war. (ref: Ссылка )
In meinem Szenario sollte ich ExecuteSqlCommand
transaktionales Verhalten immer so unterdrücken:
Diese Aussage, auf die Sie sich beziehen, gilt nur für Wiederholungsstrategien:
Wenn Sie eine Ausführungsstrategie konfiguriert haben, die zu Wiederholungen führt ...
Der Artikel, mit dem Sie verknüpft sind, ist nicht spezifisch für Azure. Azure SQL-Datenbank unterstützt Transaktionen.
Ob Sie TransactionalBehavior.DoNotEnsureTransaction
verwenden möchten oder nicht, hängt davon ab, ob während des Befehlsbereichs eine Transaktion ausgeführt werden soll. Dies ist nur relevant (soweit ich weiß), wenn Sie mehrere T-SQL-Anweisungen im Stapel haben.
Mit anderen Worten, wenn Ihre Ausführungsstrategie Wiederholungen hat und mehrere Anweisungen innerhalb einer Transaktion ausgeführt werden sollen, müssen sie alle in einem einzigen Batch wie unten aufgeführt sein.
Damit sich eine Transaktion über mehrere Stapel erstreckt, müsste sie mit db.Database.BeginTransaction
erstellt werden. Es ist dieses explizite BeginTransaction
, das das Dokument, das Sie verlinkt haben , in Kombination mit Wiederholungsversuchen nicht erlaubt ist . Die Transaktion, die von TransactionalBehavior.EnsureTransaction
erstellt wird, ist unabhängig von der Wiederholungsrichtlinie zulässig (weil sie vollständig von EF verwaltet wird).
Testprogramm ist unten.
%Vor%Tags und Links azure c# entity-framework azure-sql-database