What is the difference between System.Transactions.TransactionScope
and EF6's Database.BeginTransaction
?
Could someone give a small example or just explain which one to use when with a clear difference?
P.S: In my project, I'm using EF6. I've already read the documentation but it didn't help much. Also looked up the examples but they are rather using SqlConnection.BeginTransaction
and now MS has introduced this new Database.BeginTransaction
in EF6.
I found out the answer in Entity Framework 6's documentation:
With the introduction of EF6, Microsoft recommends to use new API methods: Database.BeginTransaction()
and Database.UseTransaction()
. Although System.Transactions.TransactionScope
is still very well supported, it is no longer necessary for most users of EF6.
While Database.BeginTransaction()
is used only for database related operations transaction, System.Transactions.TransactionScope
, in addition to that, makes it possible for 'plain C# code' to also be transactional.
Hence, use Database.BeginTransaction()
where ever doing only db related operations in a transaction in EF6 otherwise use System.Transactions.TransactionScope
for mixing db operations and C# code together in a transaction.
For those who still prefer the TransactionScope
approach, it is recommended they checkout its limitations, especially in cloud scenarios (cloud scenarios do not support distributed transactions).
Further information can be found here