Database.BeginTransaction vs Transactions.TransactionScope


91

Qual è la differenza tra System.Transactions.TransactionScopee EF6 Database.BeginTransaction?

Qualcuno potrebbe fare un piccolo esempio o semplicemente spiegare quale usare quando con una chiara differenza?

PS: nel mio progetto, sto usando EF6. Ho già letto la documentazione ma non è stato di grande aiuto. Ho anche cercato gli esempi ma sono piuttosto usati SqlConnection.BeginTransactione ora MS ha introdotto questa novità Database.BeginTransactionin EF6.

Risposte:


99

Ho trovato la risposta nella documentazione di Entity Framework 6:

Con l'introduzione di EF6, Microsoft consiglia di utilizzare nuovi metodi API: Database.BeginTransaction()e Database.UseTransaction(). Sebbene System.Transactions.TransactionScopesia ancora molto ben supportato, non è più necessario per la maggior parte degli utenti di EF6.

Sebbene Database.BeginTransaction()sia utilizzato solo per le transazioni di operazioni relative al database System.Transactions.TransactionScope, oltre a ciò, rende possibile che anche il "codice C # normale" sia transazionale.

Quindi, utilizzare Database.BeginTransaction()dove mai si eseguono solo operazioni relative a db in una transazione in EF6, altrimenti utilizzare System.Transactions.TransactionScopeper combinare operazioni db e codice C # insieme in una transazione.

Per coloro che preferiscono ancora l' TransactionScopeapproccio, si consiglia di verificarne i limiti, soprattutto negli scenari cloud (gli scenari cloud non supportano le transazioni distribuite).

Ulteriori informazioni possono essere trovate qui


11
Sfortunatamente, non puoi nidificare le transazioni con Database.BeginTransaction, mentre puoi con TransactionScope.
Triynko

8
Cosa significa "codice C # semplice" per essere anche transazionale "?
Gerard

@ Gerard presumo significhi che se esegui operazioni SQL al di fuori di EF (come l'utilizzo di ADO.NET), anche quelle operazioni avverranno nella stessa transazione.
Rudey
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.