交易未设定

时间:2018-04-03 01:36:56

标签: c# sqlcommand .net-4.6.2

出于某种原因,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)。

任何建议都将不胜感激。

1 个答案:

答案 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 */
}