5

我在 WPF 应用程序中使用带有 EF 的 Prism 框架。

视图模型:

  • 保留服务引用(由统一容器传递)。

服务:

  • 正在为数据提供“高级”操作
  • 保留对 Repository 的引用,它为数据库提供基本的 CRUD 操作(每个存储库一个表)。

存储库:

  • 存储库中的每个方法都使用“使用”模式,我在其中使用短暂的对象上下文。

这就是我卡住的地方:在对象上下文被处理后,我不能再使用映射的属性。我的数据库模型很复杂(许多相关的表),并且在检索数据时许多 .Include() 调用会使代码变脏。

在阅读了几个线程之后,我发现“工作单元”模式可能是我需要的。

我的问题来了:

谁保留工作单元的参考(以及上下文)?如果我选择每个视图方法的上下文,viewModel 应该有上下文引用。那么如何将工作单元注入我的服务呢?或者我应该在 ViewModel 中创建新的 Service 实例并在构造函数参数中传递上下文?

4

1 回答 1

3

我们在一个项目中使用了类似的架构:

  • 每个 ViewModel 都有自己的 Service 对象,该对象被注入到构造函数中(至少是与 View 直接对应的顶层对象。一些分层 ViewModel 可能会重用其父级的 Service,但在这里保持简单)。

  • 默认情况下,每个服务操作都会创建一个新的上下文,但是...

  • 服务具有 BeginContext 和 EndContext 方法,ViewModel 可以调用这些方法来保持上下文在多个操作中打开。

这对我们来说效果很好。大多数情况下,我们在视图打开时调用 BeginContext,在视图关闭时调用 EndContext。

于 2013-06-13T18:46:21.480 回答