Database.BeginTransaction vs Transactions.TransactionScope

c#, entity-framework, entity-framework-6, transactions, transactionscope

Solution

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

Problem

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.

Original source