【发布时间】:2009-11-21 23:37:45
【问题描述】:
我有一些创建 TransactionScope 实例的 VB.NET 代码:
LoggingUtility.LogDebug("UpdateCallTable", "SatComCallDataImporter", "About to associate call data with contracts")
Using ts = New TransactionScope()
LoggingUtility.LogDebug("UpdateCallTable", "SatComCallDataImporter", "Getting all unimported SatCom calls")
我的应用程序在调用创建新 TransactionScope 时抛出异常,“对象引用未设置为对象的实例。”。我的开发机器或测试机器上没有抛出异常;只在客户的生产机器上,我不知道为什么。我已经在这条线之前和之后放置了调试线,所以我很肯定是这条线导致了问题。
A 在整个应用程序中都使用了 TransactionScopes,这是在客户端计算机上引发异常的唯一地方。
“关于将调用数据与合同关联”被写入日志,下一个日志条目是“对象引用未设置为对象的实例”。
如果我将其移出事务,代码可以正常工作。
我已经为此苦苦挣扎了 4 天,而且还没有接近。
【问题讨论】:
-
傻我。错误正在中止事务,所以我的调试日志当然没有被写入(到数据库)。实际原因是导入规范和正在导入的数据之间存在差异。一个永远不应该为空的字段实际上是空的。我从来没有在测试中选择它,因为我有一个正确的规范样本文件来测试,而不是真实数据。现在听起来太明显了。
-
ARgg,完成了那个。如果您尝试在“如果中止执行此操作”中添加一些逻辑,那么您最终会支持整个事情,那就更好了。仅供参考 New TransactionScope(TransactionScopeOption.Supress) 将允许您在当前事务之外对数据库执行操作。
标签: vb.net transactions transactionscope