Asp.net mvc MVC存储库模式-何时使用AutoMapper?

Asp.net mvc MVC存储库模式-何时使用AutoMapper?,asp.net-mvc,model-view-controller,asp.net-mvc-4,Asp.net Mvc,Model View Controller,Asp.net Mvc 4,我们使用Telerik ORM生成我们的领域模型,并将它们放在一个名为DAL的类库中。然后我们有了我们的UI项目,它是一个MVC4Web应用程序。在这里,我们有存储库和模型。这里的模型是viewmodels,专门用于显示视图上的数据 现在我的问题是: 存储库是否应直接返回viewmodel 是否应将viewmodel转换为实体 使用automapper的开销是多少?应该在哪里使用 如果我们不使用automapper在存储库中转换为viewmodel,我们可能会对数据库进行不同的调用,以填充对象的

我们使用Telerik ORM生成我们的领域模型,并将它们放在一个名为DAL的类库中。然后我们有了我们的UI项目,它是一个MVC4Web应用程序。在这里,我们有存储库和模型。这里的模型是viewmodels,专门用于显示视图上的数据

现在我的问题是:

  • 存储库是否应直接返回viewmodel
  • 是否应将viewmodel转换为实体
  • 使用automapper的开销是多少?应该在哪里使用 如果我们不使用automapper在存储库中转换为viewmodel,我们可能会对数据库进行不同的调用,以填充对象的每个部分。页面的viewmodel可能包含联系人列表和选定联系人。所选联系人将使用一个对存储库的呼叫填充,联系人列表将使用另一个呼叫填充。此外,如果映射器位于存储库级别,如果我们只对“名称和id”感兴趣,那么删除所有“额外字段”如性别,不是更好吗


    我听说存储库不应该返回视图模型,因为视图模型是特定于UI的,不应该包含在数据层中。这是真的吗?这是目前正在讨论的问题。sugestion是使用Automapper仅将域模型映射到视图模型。如果您希望将后视图模型与域模型太不协调,我建议您尝试一下

    您的存储库应该返回普通的域对象。ORM映射器应该将这些类作为紧密映射到数据源的类输出。要使您的存储库/控制器能够轻松地插入各种形式,如web服务、web应用程序和其他项目,就不应该应用UI属性

    当您针对存储库接口的多个实现(如DI容器)时,Automapper非常有用。在将域对象转换为存储类对象或从存储类对象转换为域对象时,它非常有用。基本上,它减少了对翻译类的需求

    在MVC.Model区域,您可能需要创建在UI中用作模型的域对象类的DUP。随着项目的发展,您将看到这一点的好处,尤其是当您使用各种属性进行验证、显示、本地化等时。当您拥有具有非常接近命名约定的类时,像Automapper这样的工具将大大提高生产效率

    如果在Mvc.Controller类中使用映射器将数据/控制器转换为Mvc.Models,您还将看到生产率的提高

    关键是跨应用程序边界与类中的属性名称保持一致