关于嵌套事务,外部范围给我“事务已中止”异常,但内部范围成功返回

时间:2015-04-07 21:35:21

标签: c# c#-4.0 clr transactionscope

我遇到了有线问题需要你的帮助。我有嵌套的交易。 outer方法调用一个内部方法SaveChangesToSource来打开另一个事务范围。其实我知道我的底层sql可能有问题。我无法理解的是为什么我的内部事务成功完成,看起来异常被推迟,直到我调用外部cope.Complete ??

using (TransactionScope scope = new TransactionScope())
{
      SaveChangesToSource(changes);
      scope.Complete();
}


protected override void SaveChangesToSource(IEnumerable<IChange> changes)
{
    using (TransactionScope scope = new TransactionScope())
    {            
         _bl.SaveChanges(changes);
         scope.Complete();
    }
}

1 个答案:

答案 0 :(得分:1)

MS文档说,嵌套事务中的更改对于顶级事务是不可见的,直到提交嵌套事务为止,即使这样,在提交该事务之前,更改在顶级事务之外是不可见的。恕我直言,如果我正确地解释了这一点,那么外部交易的失败将触发你成功的内部交易的回滚。