2011-08-24 119 views
8

我遇到了Entity Framework和多線程的問題,我想知道是否有解決方案保持延遲加載的能力。從我的理解,數據上下文不是線程安全的,這就是爲什麼當我有多個線程使用相同的數據上下文時,我得到各種數據讀取器的錯誤。解決這個問題的方法是爲每個到數據庫的連接使用單獨的數據上下文,然後銷燬數據上下文。不幸的是,銷燬我的數據上下文會阻止我進行延遲加載。實體框架+多線程+懶加載

有沒有一種模式允許我在我的應用程序中擁有共享上下文,但仍能正確處理多個線程?

+0

將Parallel.ForEach與EF延遲加載結合使用時,我們遇到過類似的問題。 – tjrobinson

回答

9

不,沒有這樣的解決方案。您在多線程應用程序的選擇是:每個線程

  • 語境
  • 單方面產生分離非代理實體(無延遲加載,沒有變化追蹤)爲每個訪問該上下文同步。

做代理連接實體的第二種方法是災難的方式。它需要檢測與上下文的所有隱藏交互,並使相關代碼同步。您可能會以在多個切換線程中運行的單線程進程結束。

+0

+1,因爲這在技術上是正確的,但是:即使只有一個線程,在整個應用程序中共享一個上下文也是個問題。背景應該是一個工作單位,而且是短暫的。 –

+0

@克雷格:這是正確的。我並不是指整個應用程序的一個上下文實例,而是一個處理單個「邏輯操作」的多個線程的上下文。如果實體必須分離,我不確定它是否仍然是工作單位。 –

+0

謝謝。這就是我想到的答案。 –