我有一个包含视图模型的IList的viewmodel:
public class MyCustomViewModel
{
public IList<ItemViewModel> Items { set; get; }
public IList<PersonViewModel> Persons { set; get; }
public MyCustomViewModel()
{
}
}
在我的控制器的索引操作方法中,我无法弄清楚如何正确映射这种嵌套的视图模型。
Normaly我会做类似的事情:
IList<Item> items= db.Items.ToList();
var viewModel = Mapper.Map<IList<ItemViewModel>>(item);
如何使用包含其他几个viewmodel的viewmodel?我一直在尝试分别创建每个viewmodel的新实例,但是我没有看到如何将它们全部映射到我的自定义视图模型。
我无法将viewmodels映射到其他视图模型,可以吗?
答案 0 :(得分:2)
只要您为两种视图模型类型定义了一个地图,autoMapper就会映射嵌套的视图模型。
例如,如果我有一个ParentObjectViewModel,其属性类型为ChildObjectViewmodel,我需要确保在它们之间构建了一个映射。 Automapper将处理您的属性是IList的事实。
Mapper.CreateMap<ParentObjectViewmodel, ParentDataObject>();
Mapper.CreateMap<ChildObjectViewmodel, ChildDataObject>();
当然,如果您的媒体资源名称与视图模型和数据对象不匹配,则您需要将其指定为自动映射。
编辑: 对于您的示例,听起来您只是希望能够映射子对象(属性)。所以你会使用:
Mapper.CreateMap<ItemViewModel, Item>();
这将允许您从任何ItemViewModel类型自动化到任何Item类型(包括这些对象的IList)。在CreateMap调用中,源对象类型位于左侧,目标类型位于右侧。如果要来回映射,只需调用CreateMap两次。