在尝试调试某些东西时,我发现代码有效地执行了以下操作:
- 创建事务范围
- 创建一个事务(在这种情况下是一个 nHibernate tx,但不是很重要)
- 创建第二个事务(在本例中为标准 ADO.Net Tx)
- 提交第二个事务
- 在事务范围内调用 Complete()
- 处理事务范围。
现在 - 创建一个事务而不提交可能是一个坏主意 - 尤其是在拥有(这就是错误修复)时。
然而,在测试这个时 - 我尝试了上述的各种组合(提交所有事务,一些事务,没有事务(即只有 TScope)提交第一个,但不是第二个,添加其他事务等)并且在所有的事情中我发现以下是真的:
只有当我未能提交第一个事务并且事务范围变得分布式时,TScope 的 Dispose 才会失败:
System.InvalidOperationException :该操作对于征募的当前状态无效。
我现在很好奇,想知道为什么会这样?