未设置交易

Transaction not set

出于某种原因,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 语句,以防问题出在合并运算符 (??) 上,但它似乎没有帮助(没想到,但现在抓住了救命稻草)。

我查看了 SqlCommand.Transaction 的 C# 代码,有一条路径不会设置字段,但在那种情况下,会抛出异常,更不用说条件不应该了无论如何都会遇到(SqlCommand.cs source code).

如有任何建议,我们将不胜感激。

I did determine that SqlTransaction.Connection is null.

这就是问题所在。您可能正在设置 cmd.Transaction 属性 OK,但是当您读回它时,SqlCommand 将检查 cmd.Transaction.Connection 属性,如果它为空,它将 cmd.Transaction 设置回 null。这可能会让您看起来好像从未将其设置为开始。请注意,在这种情况下它不会引发异常。这里是相关的 source code.

new public SqlTransaction Transaction
{
    get 
    { 
        if ((null != _transaction) && (null == _transaction.Connection))
        { 
            _transaction = null;
        } 
        return _transaction;
    } 
    /* snip */
}