[英]Automapper not mapping IEnumerable<T> to IEnumerable<T> in Viewmodel
我定义了以下类;
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,尽管item具有22。要使此映射正常工作,还需要添加什么?
AutoMapper会自动映射具有相同名称的两种类型的属性。
为了按照您的情况将整个源对象映射到目标对象属性,必须明确指定:
cfg.CreateMap<IEnumerable<Data.Models.Lists.List>, Models.Lists.IndexViewModel>()
.ForMember(dest => dest.Lists, m => m.MapFrom(src => src));
您是将项目直接映射到viewmodel的实例,而不是Lists
属性。 您的第一个映射配置很好,第二个不需要。
var model = new IndexViewModel()
{
Lists = Mapper.Map<IEnumerable<Infrastructure.Models.Lists.List>>(items)
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.