如何使用AutoMapper将嵌套List映射到另一个List

时间:2017-08-23 06:46:08

标签: c# automapper dto

我正在使用最新版本的Auto Mapper 6.1.0'。 我有PollPolOption表,如下所示:

public class Poll
{
      public int Id { get; set; }
      public string Title { get; set; }
      public string Body { get; set; }
      public virtual ICollection<PollOption> Options { get; set; }
}

public class PollOption 
{
   public virtual string Title { get; set; }
   public int Id { get; set; }
   public int PollId { get; set; }
   public virtual Poll Poll { get; set; }
}

我对这些模型有两个viewModels赞:

public class EditPollViewModel
{
    public int Id { get; set; }
    public virtual string Title { get; set; }
    public List<PollOptionViewModel> Options { get; set; }
}
public  class PollOptionViewModel
{
    public int Id { get; set; }
    public string Title { get; set; }

}

我将其用于Auto Mapper配置:

config.CreateMap<Poll, EditPollViewModel>().ForMember(dest => dest.Options, src => src.MapFrom(t => t.Options));

但是当我运行项目时,我遇到了错误。

 return Mapper.Map<EditPollViewModel>(model);

我收到了这个错误:

  

缺少类型映射配置或不支持的映射。

     

映射类型:PollOption - &gt; PollOptionViewModel

     

PollOption - &gt;

     

PollOptionViewModel

1 个答案:

答案 0 :(得分:5)

您不需要具有相同名称的地图成员,例如OptionsOptions Automapper会自动执行此操作而您忘记将PollOption映射到PollOptionViewModel

config.CreateMap<PollOption , PollOptionViewModel>().ReverseMap()

并更改

public List<PollOptionViewModel> Options { get; set; }

public ICollection<PollOptionViewModel> Options { get; set; }

还在地图中添加ReverseMap()

config.CreateMap<Poll, EditPollViewModel>().ReverseMap()