Слід зазначити, що при використанні TransactionScopeнемає необхідності у try/catchвашій конструкції. Вам просто потрібно зателефонувати Completeдо області, щоб здійснити транзакцію, коли область дії виходить.
Сказане, TransactionScopeяк правило, є кращим вибором, оскільки це дозволяє вкладати виклики до інших методів, які можуть вимагати транзакції, без необхідності передавати стан транзакції навколо.
При дзвінку BeginTransactionна DbConnectionоб'єкт, ви повинні передати цей об'єкт транзакції навколо , якщо ви хочете , щоб виконувати інші операції в одній і тій же операції, але в іншому методі.
До TransactionScopeтих пір, поки існує область дії, вона буде обробляти все, що реєструється з потоком Transactionу потоці, роблячи ваш код чистішим та ремонтопридатнішим.
На додачу до цього, ви маєте додаткову перевагу, оскільки можете використовувати інші ресурси, які можуть брати участь у транзакціях, а не лише підключення до бази даних.
Слід зазначити, що у ситуаціях, коли вам потрібно максимально використати свої з’єднання та операції з базами даних, ви можете не захотіти використовувати TransactionScope ; навіть проти однієї бази даних ви запускаєте можливість використання Координатора розподілених транзакцій і перетворення транзакції на розподілену транзакцію (навіть для одного з'єднання з базою даних).
У цих випадках, засмучуючи ваш дизайн, ви можете розглянути можливість передачі транзакції, пов’язаної з підключенням.
Або , якщо ви знаєте, що будете використовувати один ресурс послідовно (і в тому самому потоці), можливо, ви захочете створити клас, який посилає-підраховує ваше з’єднання / транзакцію.
Ви створили б клас, який при побудові створює ваш ресурс / збільшує кількість. Він також реалізує IDisposable(в якому ви зменшуєте / звільняєте / фіксуєте / перериваєте, коли відлік дорівнює нулю), і зберігає рахунок у змінній, яка ThreadStaticAttributeдо нього застосована.
Це дозволяє відокремити управління транзакціями від логічного коду і при цьому досить ефективно утримувати окремий ресурс (замість того, щоб перерости до розподіленої транзакції).