Это исключение нельзя отладить без полной трассировки стека. Это имеет различное значение в зависимости от контекста. Обычно это означает, что вы делаете что-то, что не следует делать внутри транзакции, но без просмотра вызовов db или трассировки стека все, что может сделать любой, - это угадать. Некоторые распространенные причины, о которых я знаю (и я уверен, это далеко не исчерпывающе):
- Доступ к нескольким источникам данных (т. Е. К разным строкам подключения) внутри вложенного
TransactionScope
. Это вызывает переход к распределенной транзакции, и если вы не используете DTC, произойдет сбой. Ответ обычно не , чтобы включить DTC, но чтобы очистить транзакцию или обернуть доступ к другим данным новым TransactionScope(TransactionOptions.RequiresNew)
.
- Необработанные исключения в пределах
TransactionScope
.
- Любая операция, которая нарушает уровень изоляции, например, попытка прочитать только что вставленные / обновленные строки.
- SQL-блокировки; транзакции могут даже блокировать себя в некоторых случаях, но если применяется # 1, изоляция других операций в новые транзакции может вызвать взаимные блокировки, если вы не будете осторожны.
- Тайм-ауты транзакций.
- Любая другая ошибка из базы данных.
Я точно не знаю всех возможных причин, но если вы опубликуете в своем коде полную трассировку стека и фактические вызовы БД, я посмотрю и сообщу, если что-нибудь увижу.