自动映射器 - 使用嵌套视图模型映射视图模型
本文关键字:视图 映射 模型 嵌套 | 更新日期: 2023-09-27 17:55:48
我有一个视图模型,其中包含视图模型的IList:
public class MyCustomViewModel
{
public IList<ItemViewModel> Items { set; get; }
public IList<PersonViewModel> Persons { set; get; }
public MyCustomViewModel()
{
}
}
在我的控制器的 Index 操作方法中,我无法弄清楚如何正确映射这种嵌套视图模型。
正常情况下,我会做这样的事情:
IList<Item> items= db.Items.ToList();
var viewModel = Mapper.Map<IList<ItemViewModel>>(item);
这将如何与包含其他几个视图模型的视图模型一起工作?我一直在尝试单独创建每个视图模型的新实例,但我看不到如何将它们全部映射到我的自定义视图模型。
我无法将视图模型映射到其他视图模型,可以吗?
只要您为两种视图模型类型定义了映射,autoMapper 就会映射嵌套视图模型。
例如,如果我有一个属性类型为 ChildObjectViewModel 的 ParentObjectViewModel,我需要确保我在它们之间构建了一个映射。自动映射器将处理您的属性是IList的事实。
Mapper.CreateMap<ParentObjectViewmodel, ParentDataObject>();
Mapper.CreateMap<ChildObjectViewmodel, ChildDataObject>();
当然,如果属性名称与视图模型和数据对象不匹配,则需要向自动映射器指定该名称。
编辑:对于您的示例,听起来您只是希望能够映射子对象(属性)。因此,您将使用:
Mapper.CreateMap<ItemViewModel, Item>();
这将允许您从任何 ItemViewModel 类型自动映射到任何 Item 类型(包括这些对象的 ILists)。在 CreateMap 调用中,源对象类型位于左侧,目标类型位于右侧。如果要来回映射,只需调用CreateMap两次即可。