3 votes

AutoMapping des collections dans les objets

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 ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X