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