Transaktion für ExecuteSqlCommand in Azure

8

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:

%Vor%     
Mister Epic 02.07.2015, 13:55
quelle

2 Antworten

6

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.

    
usr 06.07.2015, 16:19
quelle
3

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).

%Vor%

Testprogramm ist unten.

%Vor%     
Jared Moore 06.07.2015 19:01
quelle