MVVM +实体框架架构混乱

时间:2013-06-13 15:27:30

标签: entity-framework mvvm unit-of-work objectcontext

我在WPF应用程序中使用Prism框架和EF。

视图模型:

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

服务:

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

存储库:

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

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

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

我的问题出现了:

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

1 个答案:

答案 0 :(得分:3)

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

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

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

  • 服务具有可以调用的BeginContext和EndContext方法 由ViewModels通过多个操作保持上下文打开。

这对我们来说非常好。大部分时间我们在打开View时调用BeginContext,在关闭时调用EndContext。