繁体   English   中英

自动映射器未映射IEnumerable <T> 到IEnumerable <T> 在Viewmodel中

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM