Linq2Sql DataContext和TransactionScope,嵌套方式错误?

时间:2011-11-20 17:09:46

标签: .net linq-to-sql transactionscope nested

在我们当前的项目中,我们有时会嵌套创建一个DataContext和TransactionScope,如下所示:

using(var dc = OurDataContext.CreateInstance())
{
    DoSomething(dc);
    ...
}

void DoSomething(OurDataContext dc)
{
    using(var scope = new TransactionScope())
    {
        // DoSomethingElse() might call dc.SubmitChanges() which is why
        // we inserted the TransactionScope here
        DoSomethingElse(dc);
        dc.SubmitChanges();
        scope.Complete();
    }
}

这是否真的像我们期望的那样有效?

(即使截止日期很紧,发现这样的代码也很尴尬。)

1 个答案:

答案 0 :(得分:1)

如果您有更多时间,这可能不是您的方式,它应该按照您的预期工作。您具有单个数据上下文的事务范围,并且您的所有工作都在该事务的范围内完成。它应该以您期望的方式提交或回滚。

您可能已经意识到,传递数据上下文对象可能不是共享上下文对象的最有效方式。一种可能的替代方法是创建一个上下文对象,然后使用ThreadStaticObject在方法之间共享它。我们经常这样做。