Транзакция не установлена
По какой-то причине SqlCommand.Transaction
не устанавливается. Код, который его устанавливает, определенно вызывается (проверено в отладчике), но после того, как свойство установлено, свойство по-прежнему null
,
Вот код...
cmd.Connection = cmd.Connection ?? Connection;
cmd.Transaction = cmd.Transaction ?? Transaction;
if (cmd.Transaction == null && Transaction != null)
{
var t = Transaction;
cmd.Transaction = t;
}
Определение транзакции...
private SqlTransaction Transaction { get; set; }
Я добавил оператор if в случае, если проблема заключалась в операторе объединения (??), но, похоже, это не помогло (не ожидал этого, но теперь цепляется за соломинку).
Я посмотрел на код C# для SqlCommand.Transaction
и есть путь, где поле не будет установлено, но в этом сценарии выдается исключение, не говоря уже о том, что условие не должно выполняться в любом случае ( исходный код SqlCommand.cs).
Мы ценим любые предложения.
1 ответ
Я определил, что SqlTransaction.Connection имеет значение null.
Это проблема. Вы можете устанавливать cmd.Transaction
свойство в порядке, но когда вы читаете его обратно, SqlCommand
проверим cmd.Transaction.Connection
свойство, и если оно равно нулю, оно устанавливает cmd.Transaction
вернуться к нулю. Из-за этого может показаться, что вы никогда не устанавливали его с самого начала. Обратите внимание, что это не вызывает исключения в этом сценарии. Вот соответствующий исходный код.
new public SqlTransaction Transaction
{
get
{
if ((null != _transaction) && (null == _transaction.Connection))
{
_transaction = null;
}
return _transaction;
}
/* snip */
}