是否可以使用Automapper将多个DTO对象映射到单个ViewModel?

JP.*_*JP. 18 .net c# asp.net asp.net-mvc automapper

我想知道是否可以使用Automapper将多个DTO对象映射到单个ViewModel对象?

本质上,我有多个DTO对象,并希望在ASP.NET MVC 2.0中的单个屏幕上显示每个对象的信息.为此,我想将DTO对象(或其中的一部分......)展平到Viewmodel中,并将所述viewmodel传递给视图.如果我有一个DTO,这将很容易,但我从未见过它是用多个完成的.显然,有很多迂回的方法可以做到这一点(在automapper之外),但这是我想采取的方法,如果可能的话.

Nen*_*nad 8

如果您有2个DTO类和1个展平视图模型:

public class Dto1
{
    public string Property1 { get; set; }
}
public class Dto2
{
    public string Property2 { get; set; }
}
public class FlattenedViewModel
{
    public string Property1 { get; set; }
    public string Property2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

并为两个DTO创建映射以查看模型:

CreateMap<Dto1, FlattenedViewModel>();
CreateMap<Dto2, FlattenedViewModel>();
Run Code Online (Sandbox Code Playgroud)

您可以将1st DTO映射到模型,然后只需"追加"第二个DTO:

var dto1 = new Dto1 { Property1 = "Value1"; }
var dto2 = new Dto2 { Property2 = "Value2"; }

var model = Mapper.Map<FlattenedViewModel>(dto1); // map dto1 properties
Mapper.Map(dto2, model); // append dto2 properties
Run Code Online (Sandbox Code Playgroud)


Ale*_*roß 7

您可以创建一个复合DTO,它包含两个或多个DTO对象,并将复合DTO映射到输出视图模型.

  • 这就是我们所做的,我发现它效果最好.然后,该复合表示对象倾向于开始包含与复合对象相关的行为等. (2认同)
  • 我开始沿着那条路走下去,但后来意识到如果必须先手动映射到复合对象才能映射<>(),那么这个额外的步骤给了我什么呢?按照这种方法,您可以确保所有对象映射都通过AutoMapper进行管理,但除了手动映射到复合外,还可以使用.我并不是完全反对这个想法,只是说... (2认同)