未设置交易
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 */
}
出于某种原因,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 */
}