Lanfear, я столкнулся с тем же сообщением об ошибке и нашел решение. Ваша ситуация может быть другой, но я надеюсь, что следующие знания будут вам полезны.
System.Transactions.Transaction.Current.TransactionInformation.Status
вернет статус текущей транзакции.
В каждом случае, когда выдается исключение с сообщением The operation is not valid for the state of the transaction
, когда я перехожу через отладчик, я вижу, что состояние «Прервано» до того, как возникнет исключение.
В моем случае проблема была вызвана вложением двух транзакций друг в друга и ошибочным прерыванием обеих, когда я хотел прервать только одну. По-видимому, если вы используете TransactionScope
конструктор по умолчанию New TransactionScope()
с двумя вложенными транзакциями, отмена внутренней транзакции также отменяет внешнюю транзакцию. Решение состоит в том, чтобы использовать конструктор New TransactionScope(TransactionScopeOption.RequiresNew)
. Используя этот конструктор, внутренняя транзакция будет новой транзакцией, и ее прерывание не прервет внешнюю транзакцию.
Это решило мою проблему.