База даних.BeginTransaction проти транзакцій.TransactionScope


87

У чому різниця між System.Transactions.TransactionScopeта EF6 Database.BeginTransaction?

Хтось може навести невеликий приклад або просто пояснити, який із них використовувати, коли є чітка різниця?

PS: У своєму проекті я використовую EF6. Я вже прочитав документацію, але це не дуже допомогло. Також переглянув приклади, але вони скоріше використовуються, SqlConnection.BeginTransactionі зараз MS представила це нове Database.BeginTransactionу EF6.

Відповіді:


97

Я знайшов відповідь у документації 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підходу, рекомендується перевірити його обмеження, особливо в хмарних сценаріях (хмарні сценарії не підтримують розподілених транзакцій).

Додаткову інформацію можна знайти тут


11
На жаль, ви не можете вкласти транзакції з Database.BeginTransaction, тоді як ви можете з TransactionScope.
Трійко

8
Що насправді означає `` простий код C # '', який також є транзакційним?
Джерард,

@Gerard Я припускаю, це означає, що якщо ви виконуєте операції SQL поза EF (наприклад, використовуючи ADO.NET), ці операції також відбуватимуться під тією ж транзакцією.
Руді
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.