具有实体框架项目结构的MVVM

时间:2012-08-10 22:30:22

标签: wpf entity-framework mvvm

我目前正在学习WPF中的MVVM。我正在创建一个使用Code First方法合并Entity Framework的应用程序。我项目的正确结构应该是什么?

MVVM具有这种结构

Views 
ViewModels
Model 

我目前的计划是将我的POCO放入Model文件夹中。我应该在哪里放置继承自DbContext类的类?

2 个答案:

答案 0 :(得分:4)

MVVM本身并未指定服务基础架构。虽然您的POCO域应保留在“Model”目录中,但MVVM实现不应知道DbContext。

换句话说,不应该有一个派生自DbContext的类。

我通常通过ViewModelProvider构造提供这种类型的功能,该构造将“实际”模型从ViewModel实现中抽象出来。这有助于更容易地进行模拟等。所有具体的viewModel实现都应该通过这种抽象“提供”。

答案 1 :(得分:0)

Models,Views和ViewModels存储桶实际上只是应用程序的各个层。只要它们之间的交互不违反MVVM模式,它们的实际位置无关紧要。

也就是说,我倾向于遵循ASP.NET MVC和T4Scaffolding NuGet包设置的模式。安装该软件包后,您可以发出以下命令。

Scaffold Repository -ModelType Person

这将基于Person模型类为您构建两个新类。

  • 模型\ MyApplicationContext.cs
  • 模型\ PersonRepository.cs

第一个只是一个标准的DbContext类,就像你期望的那样。您的Views或ViewModles不会直接与此类进行交互。存储库类提供了对上下文的抽象;这是你应该在层之间传递的那个。存储库也比DbContaxt更容易模拟,并且可以使用完全不同的技术(如WCF数据服务)轻松实现。

希望这个答案至少为你提供一个好的起点。