2010-07-16 2 views
3

Мне поручено доказать или опровергнуть поддержку транзакций в .net. Мы все знаем, что TransactionScope может обрабатывать передачу/откат простых вещей, таких как вставка 3 записей в 3 разных таблицы, а затем удаление 5 записей в 5 других таблицах.Работает ли .net TransactionScope очень сложные вещи базы данных?

Моя команда не уверена, что TransactionScope может обрабатывать транзакцию должным образом, если эти вставки/удаления имеют триггеры. Или если мы выполним SP, у которого есть свои собственные вложенные транзакции.

Поддерживает ли поддержка транзакций .net эти более сложные ситуации? Нужно ли указывать какие-то не столь очевидные варианты, чтобы все это работало?

Я слышал, что некоторые из наших SP могут вызвать у нас проблемы, поскольку некоторые транзакции совершают отдельные транзакции. Кто-нибудь знает, обрабатывает ли этот конкретный сценарий TransactionScope?

ответ

2

Мы используем TransactionScope для выполнения очень сложных и длительных операций с базами данных, включающих тысячи строк по десяткам или более таблиц. Он отлично справляется с этим. Тем не менее, IMO, вы НЕ хотите запускать и совершать транзакции в хранимых процедурах и/или триггерах. Вы должны разрешить код вашего вызова (C#). Вы теряете большую гибкость, обрабатывая транзакции на более низком уровне хранимой процедуры.

Кроме того, при использовании TransactionScope будьте осторожны, чтобы ограничить себя одним объектом соединения. Если вы этого не сделаете, транзакция будет переходить на транзакцию MTC, которая требует, чтобы служба MTC выполнялась на клиенте и сервере.

+0

Предполагаю, вы используете довольно много SP и триггеров? Моя команда (мне не так много) особенно беспокоит SP, у которых есть свои собственные вложенные транзакции. Также у нас есть несколько триггеров/индексов, которые должны поддерживать целостность, и если мы вставляем в table1-column1, триггер вставляет в table2-column2, и если эти таблицы когда-либо выходили из синхронизации, это было бы очень плохо. Любая разработка, которую вы можете предоставить, будет высоко оценена. Спасибо за ваш первоначальный ответ. – Sublimemm

+0

Спасибо за совет по MTC, мы уже столкнулись с этим и запустили его на обоих клиентских серверах. Если бы только я мог прочитать ваш комментарий несколько месяцев назад, я бы не потратил 3 дня на то, чтобы выяснить, почему мой оператор SIMPLE не работал: 0 – Sublimemm

+1

@Sublimemm. У вас может быть столько триггеров, сколько нужно, добавив строки в столько таблиц, сколько вы хотите. Использование TransactionScope будет обрабатывать фиксацию и откат всего лишь штрафа. Но вы просите о нарушении или откате транзакций в хранимых процедурах. Вы не должны этого делать (ИМО). –

Смежные вопросы