Eu encontrei a resposta na documentação do Entity Framework 6:
Com a introdução do EF6, a Microsoft recomenda o uso de novos métodos de API: Database.BeginTransaction()
e Database.UseTransaction()
. Embora System.Transactions.TransactionScope
ainda seja muito bem suportado, não é mais necessário para a maioria dos usuários do EF6.
Enquanto Database.BeginTransaction()
é usado apenas para transações de operações relacionadas ao banco de dados System.Transactions.TransactionScope
, além disso, torna possível que o 'código C # simples' também seja transacional.
Portanto, use Database.BeginTransaction()
onde quer que esteja fazendo apenas operações relacionadas ao banco de dados em uma transação em EF6, caso contrário, use System.Transactions.TransactionScope
para misturar operações de banco de dados e código C # em uma transação.
Para quem ainda prefere a TransactionScope
abordagem, é recomendável verificar suas limitações, principalmente em cenários de nuvem (os cenários de nuvem não suportam transações distribuídas).
Mais informações podem ser encontradas aqui