[C#] Linq到SQL DataContext的多個/單個實例


Answers

我為每個事務使用一個新的DataContext實例。

重複使用舊的實例可能會很麻煩,並且會使DataContext的內容膨脹,因為任何已經加載的項目都必須被跟踪 - 你的應用程序將變得越來越慢,越來越慢。

如果您需要的項目比事務長,則可以通過克隆項目將其從DataContext分離,並可以使用Attach()將其重新附加到新的新DataContext。
我甚至可以克隆一個項目,通過WCF在網絡上發送它,稍後再調用它,將它附加到一個新的DataContext並保存更改(當然,我需要一個時間戳列)。

Question

我有一個項目,有許多不同的類查詢和修改共同的一組表中的數據。 我建立了一個.dbml文件,為我們提供了一個DataContext類。 我的問題是是否所有對像都應該使用DataContext的單個實例,或者多個實例是否可以安全使用。 我也想知道在單個DataContext的情況下線程的安全性,以及是否應該對其方法的訪問進行同步。




使用單個數據上下文對象的問題在於,如果您已經對其隊列添加了一些更改,並且希望僅對某些排隊的更改進行回滾,則可能會遇到麻煩。

這就是為什麼我為每個類使用數據上下文對象的原因 - 我的User類有自己的數據上下文,我的Application類有自己的類,等等。

這種模式消除了在我的項目中做回滾的大部分麻煩。