我有这样的情况:
[TestMethod]
public void net_call_com_in_transaction()
{
TransactionOptions tranOptions = new TransactionOptions();
tranOptions.IsolationLevel = IsolationLevel.ReadUncommitted;
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, transOptions))
{
// ...someCode that Update Table1 with SqlCommand instructions
COMWrapper wrapper = GetComWrapper();
wrapper.Publish();
// otherCode....
scope.Commit();
}
}
我使用TransactionScopeOption'Required'打开一个事务,并在其中通过SqlCommand更新 Table1 。
随后,正如您在上面的代码中看到的,我在Interop中调用一个COM对象( wrapper.Publish() - 总是在事务中)它读取了一个 Table1 (内部方法Publish())。
问题是从COM读取 Table1 是待决,因为我有.NET事务锁定 Table1 。此时你会说:“你应该阅读COM中的Table1 with WITH WITH(NOLOCK)”但是由于其他原因我不能这样做。
那么,还有另一个解决方案允许我在没有待处理状态的COM中读取 Table1 吗?