C# 与ViewModels共享EntityFramework上下文
我使用EF 6.1 alpha和Caliburn.Micro 2.0-alpha 我有一个名为ProductWorkspaceViewModel的视图模型,其中包含一个ProductViewModel。 这两个ViewModel都使用EF和各自的上下文,而第一个ViewModel从Db读取所有产品并将其显示在列表中,然后对所选项目执行CRUD操作 现在,当我从ProductViewModel中删除、添加或更新产品时,它应该在ProductWorkSpaceViewModel中得到更新。我使用EventAggregator更新工作区,并使用LoadAll()或将更新ProductEntity发送到WorkSpaceViewModel。但是,当我从工作区中选择相同的更新产品时,ProductViewModel中的延迟相关属性不会更新,因为它们都具有不同的上下文实例 我想为这两个ViewModel使用一个共享上下文,但我已经阅读了其他问题,比如上下文不应该被共享,应该在操作完成后尽快处理,比如delete 如何才能最好地解决上述问题。许多数据模板也使用工作区上下文 我应该使用共享上下文还是使用加载的所有惰性属性更新任一ViewModel。但这将增加更多的代码,而且很复杂 寻找最佳实践 Upate: 我刚才提到DbContext供参考,我使用了一个DAL,它有一个从DbContext继承的类C# 与ViewModels共享EntityFramework上下文,c#,wpf,entity-framework,mvvm,C#,Wpf,Entity Framework,Mvvm,我使用EF 6.1 alpha和Caliburn.Micro 2.0-alpha 我有一个名为ProductWorkspaceViewModel的视图模型,其中包含一个ProductViewModel。 这两个ViewModel都使用EF和各自的上下文,而第一个ViewModel从Db读取所有产品并将其显示在列表中,然后对所选项目执行CRUD操作 现在,当我从ProductViewModel中删除、添加或更新产品时,它应该在ProductWorkSpaceViewModel中得到更新。我使用Ev
此外,我想更新,我的主要项目不使用EF或任何DAL。它充当我作为子项目创建的所有模块的主机。例如,ProductViewModel是Inventory模块的一部分,我使用IoC(MEF)将其加载到Main.exe中最佳做法是,您的
视图模型不直接使用实体框架或其数据上下文,而是有一个数据访问层,负责所有数据库操作,您的虚拟机应使用服务提供商与DAL通信
事实上,您甚至不应该在主项目中引用实体框架,而应该只在DAL类库中引用实体框架
在您的虚拟机中,您应该使用Product
类的observedcollection
,并且您的两个虚拟机都应该在父子模式下使用相同的observedcollection
,在这种情况下,您对ProductViewModel
中的产品所做的任何更改都会立即影响您的应用ProductWorkspaceViewModel
最佳做法是,您的ViewModel
不直接使用实体框架或它的DataContext
s,而是有一个负责所有DB操作的数据访问层,您的虚拟机应该使用服务提供商与您的DAL通信
事实上,您甚至不应该在主项目中引用实体框架,而应该只在DAL类库中引用实体框架
在您的虚拟机中,您应该使用Product
类的observedcollection
,并且您的两个虚拟机都应该在父子模式下使用相同的observedcollection
,在这种情况下,您对ProductViewModel
中的产品所做的任何更改都会立即影响您的应用ProductWorkspaceViewModel
请查看我的更新问题请查看我的更新问题