考虑以下:
using (var outerScope = new TransactionScope())
{
InsertDataInTableOne();
InsertDataInTableTwo();
InsertDataInTableThree();
outerScope.Complete();
}
现在我想必须在事务InsertDataInTableOne
之外运行。outerScope
这是一个简化的表示,因为TransactionScope
创建了几个调用链,所以我不能只是把调用放在创建InsertDataInTableOne
之外。TransactionScope
我也知道这可能不是一个好的做法,我们正在努力解决问题。但我们现在需要这个快速修复。
using (var outerScope = new TransactionScope())
{
using (var innerScope = new TransactionScope(TransactionScopeOption.RequiresNew))
{
InsertDataInTableOne();
innerScope.Complete();
}
InsertDataInTableTwo();
InsertDataInTableThree();
outerScope.Complete();
}
那没有用。我什至尝试先创建一个TransactionScope
with Suppress
,然后再创建一个RequiresNew
.
那么是否可以立即在数据库中插入数据,有效地忽略您在数据库中的事实TransactionScope
?
连接是在这些方法之外建立的(实际上是在进入被调用的服务时)。