Ответ 1
Я нашел ответ в документации Entity Framework 6:
С введением EF6 Microsoft рекомендует использовать новые методы API: Database.BeginTransaction()
и Database.UseTransaction()
. Хотя System.Transactions.TransactionScope
по-прежнему очень хорошо поддерживается, для большинства пользователей EF6 он больше не нужен .
В то время как Database.BeginTransaction()
используется только для транзакций операций с базой данных, System.Transactions.TransactionScope
, в дополнение к этому, делает возможным, чтобы "простой код С#" также был транзакционным.
Следовательно, используйте Database.BeginTransaction()
, где когда-либо выполняли только операции, связанные с db в транзакции в EF6, в противном случае используйте System.Transactions.TransactionScope
для смешивания операций db и кода С# вместе в транзакции.
Для тех, кто по-прежнему предпочитает подход TransactionScope
, рекомендуется проверить его ограничения, особенно в облачных сценариях (облачные сценарии не поддерживают распределенные транзакции).
Дополнительную информацию можно найти здесь