出于某种原因,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语句以防问题是coalesce运算符(??),但它似乎没有帮助(没想到它,但现在抓住了吸管)。
我查看了SqlCommand.Transaction
的C#代码,并且有一个不会设置字段的路径,但在这种情况下,会抛出异常,更不用说不应该满足条件了无论如何(SqlCommand.cs source code)。
任何建议都将不胜感激。
答案 0 :(得分:1)
我确定SqlTransaction.Connection为空。
这就是问题所在。您可能正在设置cmd.Transaction
属性,但是当您将其读回时,SqlCommand
将检查cmd.Transaction.Connection
属性,如果它为null,则会设置cmd.Transaction
回到null。这可能会使您看起来从未将其设置为开头。请注意,它不会在此方案中引发异常。这是相关的source code。
new public SqlTransaction Transaction
{
get
{
if ((null != _transaction) && (null == _transaction.Connection))
{
_transaction = null;
}
return _transaction;
}
/* snip */
}