2013-03-07 3 views
1

Я создал неявное сделку так:не удается получить доступ к Сделке в методе

Using ts As New TransactionScope(TransactionScopeOption.Required, New TimeSpan(1, 0, 0, 0)) 

MethodA() 
ts.Complete() 

End Using 

MethodA() в свою очередь, вызывает ряд методов, которые успешно заручиться в транзакции окружающей среды и я могу видеть его:

enter image description here

однако один метод (который-глубоко в стеке вызовов от создания TransactionScope выше), кажется, мы больше не имеем доступ к сделке окружающей среды:

enter image description here

Это было мое убеждение, что это будет доступно в любом месте ниже в стеке внутри транзакции, и, вероятно, является причиной того, почему код внутри этого метода, не имеет доступа к данным в рамках этой сделки.

Любые идеи, почему окружающая транзакция недоступна?

+0

Был ли он совершен до этого метода? – Paddy

+0

Нет - и как только метод будет выполнен, та же самая транзакция снова появится –

ответ

1

Если Transaction не объявлен, похоже, что этот файл просто не содержит директивы using, которая приведет ее в объем. Попробуйте установить часы против

System.Transactions.Trasaction.Current.TransactionTraceId.TransactionIdentifier 

вместо этого, как будет работать с или без using директивы.

Если бы это было так, что сделка окружающей среды не была доступна, то Transaction все равно будет хорошо, но Transaction.Current бы null. Общей причиной этого является то, что переключает поток, например async. Знать, что происходит над контекстом исполнения, сложно.

+0

Это всегда происходит со мной! Я попробовал это, но не понял, что это «System.Transactions.Tranaction» (транзакция дважды), поэтому он не работал. Похоже, что он завершен в правильной транзакции в конце концов. –

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