我定义了以下类;
Data.Models.Lists.List
Infrastructure.Models.Lists.List
两者都包含以下字段;
public int Id { get; set; }
public string Description { get; set; }
我也定义了这个视图模型;
public class IndexViewModel
{
public IEnumerable<Infrastructure.Models.Lists.List> Lists { get; set; }
}
在我的Automapper配置中,我只是执行以下操作;
cfg.CreateMap< Data.Models.Lists.List, Infrastructure.Models.Lists.List>()
我认为这就足够了,但我也加了这个;
cfg.CreateMap<IEnumerable<List>,Models.Lists.IndexViewModel>();
但是,当我尝试映射控制器中的项目时;
var items = ListsService.GetLists(CurrentPrincipal.Id);
var model = Mapper.Map<IndexViewModel>(items);
model.Lists总是为null,虽然项目有22个。为了使这个映射有效,还需要添加什么?
答案 0 :(得分:3)
AutoMapper使用相同的名称自动映射两种类型的属性。
为了将整个源对象映射到目标对象属性,就像你的情况一样,你必须明确指定:
cfg.CreateMap<IEnumerable<Data.Models.Lists.List>, Models.Lists.IndexViewModel>()
.ForMember(dest => dest.Lists, m => m.MapFrom(src => src));
答案 1 :(得分:0)
您正在将项目映射到viewmodel的实例,而不是Lists
属性。你的第一个映射配置很好,第二个你不需要。
var model = new IndexViewModel()
{
Lists = Mapper.Map<IEnumerable<Infrastructure.Models.Lists.List>>(items)
};