1

我边走边学,所以我不熟悉 EF 和 MVC3 背后的所有概念。我有一个应用程序,其中我的 EF 模型 === MVC3 模型,但我也有一些聚合视图模型。我Person dude = Person.Get(id);在 Controllers 中调用类似的东西,其中 Person 是从数据库生成的 EF 模型,我使用自定义方法对其进行扩展,例如dude.GetSiblings();

我现在想要做的(如果你不告诉我这是一个坏主意)是将 EF 代码移动到另一个程序集中,使用新的更简单的非实体模型创建另一个程序集,我可以将其提供给我的视图和以某种方式(如果可能)序列化并作为 JSON 移动。

问题是我不知道怎么做。如果我将我的 EF 模型移动到不同的项目(如单独的 DAL),我将如何创建映射到 Ef 模型的第二个模型?如果我int id {get;set;} string name {get;set}在 EF 模型和 MVC3 模型上都有类似的代码,那不会导致很多重复吗?在我的 ViewModels 中,我只是直接使用实体class ViewModelX { Person person; List<Post> posts; int something; },但这只是一组打包的实体而不是模型,不是吗?

像 GetSiblings 这样的方法呢?var list = dude.GetSiblings()在控制器和public List<Person> GetSiblings() { return this.EFPerson.GetSiblings(); }MVC3 模型中?我对去哪里感到非常困惑。在谷歌搜索时,我真的只找到了高级和非常初学者的教程 - 或者我只是不知道要寻找什么,所以我恳请您的帮助!

4

1 回答 1

1

如果我将我的 EF 模型移动到不同的项目(如单独的 DAL),我将如何创建映射到 Ef 模型的第二个模型?

视图模型驻留在 ASP.NET MVC 应用程序中。

如果我在 EF 模型和 MVC3 模型上都有类似 int id {get;set;} string name {get;set} 的代码,那会不会导致很多重复?

是的,它会导致。这就是视图模型的目的。包含视图需要处理的数据。这些数据来自哪里并不重要。您可以使用AutoMapper等工具来自动执行域模型和视图模型之间的映射。

像 GetSiblings 这样的方法呢?var list = dude.GetSiblings() in Controller 和 public List GetSiblings() { return this.EFPerson.GetSiblings(); 在 MVC3 模型中?

以下是典型的控制器操作的样子:

public ActionResult SomeAction(int id)
{
    // fetch an instance of the domain model:
    var domainModel = DomainLayer.GetSiblings(id);

    // map the domain model to a view model (using AutoMapper):
    var viewModel = Mapper.Map<DomainModel, ViewModel>(domainModel);

    // pass the view model back to the view
    return View(viewModel);
}
于 2012-07-02T07:15:03.263 回答