Automapper没有将IEnumerable <t>映射到Viewmodel中的IEnumerable <t>

时间:2017-01-31 16:06:20

标签: c# asp.net-mvc automapper

我定义了以下类;

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个。为了使这个映射有效,还需要添加什么?

2 个答案:

答案 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)
};