Je suis un nouveau venu dans l'outil AutoMapper, qui, jusqu'à présent, est étonnant. Je rencontre des difficultés pour mapper les collections à l'intérieur du modèle et les objets ViewModel correspondants.
Pour plus de simplicité, j'ai élagué le code :
Modèle :
public class VoteQuestion
{
public virtual ICollection<VoteAnswerOption> VoteAnswerOptions { get; set; }
}
ViewModel correspondant :
public class CreateVoteQuestionViewModel
{
public List<VoteAnswerOptionViewModel> PossibleAnswers { get; set; }
}
Un autre modèle :
public class VoteAnswerOption
{
public string Answer { get; set; }
}
Et le ViewModel correspondant :
public class VoteAnswerOptionViewModel
{
public string Answer { get; set; }
}
Ma configuration de mappage dans 'Startup.cs'. J'ai essayé plusieurs options, mais cela a fonctionné pour tout le reste, sauf pour le mappage des collections.
Mapper.Initialize(config =>
{
config.CreateMap<VoteAnswerOption, VoteAnswerOptionViewModel>().ReverseMap();
config.CreateMap<List<VoteAnswerOptionViewModel>, ICollection<VoteAnswerOption>>().ReverseMap();
config.CreateMap<VoteQuestion, CreateVoteQuestionViewModel>()
.ForMember(dest => dest.PossibleAnswers, opts => opts.MapFrom(src => src.VoteAnswerOptions))
.ForMember(dest=>dest.PossibleAnswers,opts=>opts.MapFrom(src=>Mapper.Map<ICollection<VoteAnswerOption>, List<VoteAnswerOptionViewModel>>(src.VoteAnswerOptions)))
.ReverseMap();
});
Et enfin, le mappage dans mon action de contrôleur :
var newQuestion = Mapper.Map<CreateVoteQuestionViewModel, VoteQuestion>(voteQuestion);
Qu'est-ce que je rate ?