2011-11-20 52 views
0

在我們目前的項目已經發生了,我們有時窩創建一個DataContext和TransactionScope的是這樣的:Linq2Sql 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

這可能不是正是你會做,如果你有更多的時間,它應該工作按預期的方式。您擁有單個數據上下文的事務範圍,並且您的所有工作都在該事務的範圍內完成。它應該提交或回滾你期望的方式。

您可能會意識到,傳遞數據上下文對象可能不是共享上下文對象的最有效方式。一種可能的選擇是創建一個上下文對象,然後使用ThreadStaticObject在方法中共享它。我們經常這樣做。