我已經使用實體框架構建了一個WPF應用程序。我的數據存儲由分層數據組成(一個項目,具有多個不同的子實體)。C#實體框架:使用MVVM的單身上下文模式
到目前爲止,我一直在爲我的上下文使用單例模式,因爲這使我可以在我的UI中擁有一個全局導航樹(隨後用戶選擇展開特定的父項以顯示其子項時會延遲加載) 。這已經偉大的工作到現在爲止,但我現在遇到了可怕的例外:
A second operation started on this context before a previous asynchronous operation completed. Use 'await' to ensure that any asynchronous operations have completed before calling another method on this context. Any instance members are not guaranteed to be thread safe.
我明白,我看到這個例外,由於一些單位和同時請求執行一些動作正在進行加載其他實體,全部來自同一個單例上下文。
我進一步明白,最好讓上下文保持儘可能短的時間。但是,如果我希望用戶能夠看到整個項目並一次對某些實體進行更改,這將如何實現?我完全喪失瞭如何使用短暫的上下文來配置這個全局導航樹(因爲我一直在'上下文已經處置'問題中運行)。
我是否應該在上下文周圍實現一些鎖定機制,或者更糟糕的是,在從上下文請求它之前,是否已使用此鎖定機制檢查每個屬性?這種情況下推薦的最佳做法是什麼?