在我们当前的项目中,我们有时会嵌套创建一个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();
}
}
这是否真的像我们期望的那样有效?
(即使截止日期很紧,发现这样的代码也很尴尬。)
答案 0 :(得分:1)
如果您有更多时间,这可能不是您的方式,它应该按照您的预期工作。您具有单个数据上下文的事务范围,并且您的所有工作都在该事务的范围内完成。它应该以您期望的方式提交或回滚。
您可能已经意识到,传递数据上下文对象可能不是共享上下文对象的最有效方式。一种可能的替代方法是创建一个上下文对象,然后使用ThreadStaticObject在方法之间共享它。我们经常这样做。