Database.BeginTransaction vs Transactions.TransactionScope


85

Was ist der Unterschied zwischen System.Transactions.TransactionScopeund EF6 Database.BeginTransaction?

Könnte jemand ein kleines Beispiel geben oder nur erklären, welches mit einem deutlichen Unterschied verwendet werden soll?

PS: In meinem Projekt verwende ich EF6. Ich habe die Dokumentation bereits gelesen, aber es hat nicht viel geholfen. Auch die Beispiele nachgeschlagen, aber sie verwenden eher SqlConnection.BeginTransactionund jetzt hat MS diese neue Database.BeginTransactionin EF6 eingeführt.

Antworten:


96

Die Antwort fand ich in der Dokumentation zu Entity Framework 6:

Mit der Einführung von EF6 empfiehlt Microsoft die Verwendung neuer API-Methoden: Database.BeginTransaction()und Database.UseTransaction(). Obwohl System.Transactions.TransactionScopees immer noch sehr gut unterstützt wird, ist es für die meisten Benutzer von EF6 nicht mehr erforderlich .

Während Database.BeginTransaction()es nur für datenbankbezogene Transaktionen verwendet wird System.Transactions.TransactionScope, ermöglicht es darüber hinaus, dass 'einfacher C # -Code' auch transaktional ist.

Verwenden Sie daher, Database.BeginTransaction()wo immer nur db-bezogene Operationen in einer Transaktion in EF6 ausgeführt werden, andernfalls das System.Transactions.TransactionScopeMischen von db-Operationen und C # -Code in einer Transaktion.

Für diejenigen, die den TransactionScopeAnsatz immer noch bevorzugen , wird empfohlen, die Einschränkungen zu überprüfen, insbesondere in Cloud-Szenarien (Cloud-Szenarien unterstützen keine verteilten Transaktionen).

Weitere Informationen finden Sie hier


10
Leider können Sie Transaktionen nicht mit Database.BeginTransaction verschachteln, während dies mit TransactionScope möglich ist.
Triynko

5
Was bedeutet "einfacher C # -Code", um auch transaktional zu sein?
Gerard
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.