我在WPF应用程序中使用Prism框架和EF。
视图模型:
服务:
存储库:
这就是我被卡住的地方:在处理了对象上下文后,我无法再使用映射的属性了。我的数据库模型很复杂(许多相关表),并且在检索数据时会有许多.Include()调用使代码变脏。
在阅读了几个主题之后,我发现“工作单元”模式可能就是我所需要的。
我的问题出现了:
谁继续参考工作单元(以及上下文)? 如果我选择每个视图的上下文方法,viewModel应该有上下文引用。 我怎样才能将工作单元注入我的服务呢?或者我应该在ViewModel中创建新的Service实例并在构造函数参数中传递上下文?
答案 0 :(得分:3)
我们在项目中使用类似的架构:
每个ViewModel都有自己的Service对象,它被注入到构造函数中(至少是与View直接对应的顶级对象。一些分层的ViewModel可以重用它们的父服务,但是让我们在这里保持简单)。
默认情况下,每个服务操作都会创建一个新的上下文,但是......
服务具有可以调用的BeginContext和EndContext方法 由ViewModels通过多个操作保持上下文打开。
这对我们来说非常好。大部分时间我们在打开View时调用BeginContext,在关闭时调用EndContext。