2014-01-10 86 views
2

我使用EF 6.1 alpha和Caliburn.Micro 2.0 -alpha2。使用ViewModels共享EntityFramework上下文

我有一個名爲ProductWorkspaceViewModel的ViewModel,它包含一個ProductViewModel。 這兩種視圖模型都使用EF和各自的上下文,而第一次從Db中讀取所有產品並將它們顯示在列表中,稍後對所選項目執行CRUD操作。

現在,當我從ProductViewModel刪除,添加或更新產品時,它應該在ProductWorkSpaceViewModel中更新。我使用EventAggregator更新Workspace,並使用LoadAll()或將更新的ProductEntity發送到WorkSpaceViewModel。但是,當我從Workspace中選擇相同的更新產品時,Lazy的相關屬性在ProductViewModel中不會更新,因爲兩者都具有不同的Context實例。

我想爲這兩個ViewModel使用共享上下文,但已經閱讀了其他問題,比如上下文不應該共享,應該在操作完成後儘快處理,比如刪除。

如何才能最好地實現上述問題的解決方案。工作空間上下文也被許多DataTemplates使用。

我應該使用共享上下文還是應該更新任何ViewModel加載所有惰性屬性。但是這會增加更多的代碼並且很複雜。

尋找最佳實踐。

Upate: 我剛纔提到DbContext作爲參考,我使用了一個DAL,它有一個繼承自DbContext的類。

另外我想更新我的主項目不使用EF或任何DAL。它充當我作爲子項目創建的所有模塊的主機。對於例如,ProductViewModel是庫存模塊,這是我使用的IoC(MEF)加載到MAIN.EXE

回答

4

最好的做法是爲您ViewModel不是使用實體框架或它的DataContext小號直接,但有一部分數據訪問層負責所有的數據庫操作,您的虛擬機應該使用服務提供商與您的DAL進行通信。

由於事實上,你甚至不應該在你的主要項目,但在DAL類庫到實體框架僅供參考

在你的虛擬機,你應該使用ProductObservableCollection一類和你的兩個虛擬機應在父母子模式下使用相同的ObservableCollection,在這種情況下,您對ProductViewModel中的Product所做的任何更改都將立即影響您的ProductWorkspaceViewModel

+0

請參閱我的更新問題 –