如何在automapper中的列表中展平条件对象

时间:2014-01-13 08:58:09

标签: c# automapper automapper-3

我有一个Item,其中包含Product的列表,这些列表使用 AutoMapper 映射到各自的ViewModel个对象。

在我的MVC项目中,我有一个Action方法,显示带有选定Item的{​​{1}}。为此,我有一个名为Product的{​​{1}},其中包含展平的ViewModel对象,ItemDetailsViewModel列表和展平的Item

我遇到的困难最好是展示这个被选中的ProductViewModel

将其视为eBay,其中有Product,您可以选择多种变体,例如按颜色。对我来说,多种变体是Product。当用户选择Item时,我想要返回Products,即ProductItemDetails和所选Item的列表。

我想知道最好的方法吗?目前,我的方法是将Products映射到Product,选择所需的Item,然后专门将ItemDetailsViewModel的每个属性映射回ProductViewModel 。此外,由于ProductViewModelItemDetailsViewModel具有相同的命名属性,因此映射产品的最后一行将覆盖Item的ID和代码。

有关如何最好地配置映射的任何建议?

我遗漏了我的映射,因为除了将选定的Product映射回Item之外,它主要是直接的一对一映射。

ProductViewModel

ItemDetailsViewModel

动作

Mapper.CreateMap<Item, ItemViewModel>()
    .ReverseMap();

Mapper.CreateMap<ProductViewModel, ItemDetailsViewModel>()
    .ForMember(d => d.ProductId, o => o.MapFrom(s => s.Id))
    .ForMember(d => d.ProductCode, o => o.MapFrom(s => s.Code));

1 个答案:

答案 0 :(得分:0)

一种解决方案是忽略从ItemDetailsViewModelProductViewModel的映射中ItemDetailsViewModel中的属性:

Mapper.CreateMap<ProductViewModel, ItemDetailsViewModel>()
    .ForMember(d => d.Id, opt => opt.Ignore())
    .ForMember(d => d.Code, opt => opt.Ignore())
    .ForMember(d => d.ProductId, o => o.MapFrom(s => s.Id))
    .ForMember(d => d.ProductCode, o => o.MapFrom(s => s.Code));