我有一个Item
,其中包含Product
的列表,这些列表使用 AutoMapper 映射到各自的ViewModel
个对象。
在我的MVC项目中,我有一个Action方法,显示带有选定Item
的{{1}}。为此,我有一个名为Product
的{{1}},其中包含展平的ViewModel
对象,ItemDetailsViewModel
列表和展平的Item
。
我遇到的困难最好是展示这个被选中的ProductViewModel
。
将其视为eBay,其中有Product
,您可以选择多种变体,例如按颜色。对我来说,多种变体是Product
。当用户选择Item
时,我想要返回Products
,即Product
,ItemDetails
和所选Item
的列表。
我想知道最好的方法吗?目前,我的方法是将Products
映射到Product
,选择所需的Item
,然后专门将ItemDetailsViewModel
的每个属性映射回ProductViewModel
。此外,由于ProductViewModel
和ItemDetailsViewModel
具有相同的命名属性,因此映射产品的最后一行将覆盖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));
答案 0 :(得分:0)
一种解决方案是忽略从ItemDetailsViewModel
到ProductViewModel
的映射中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));