私は今までのところ驚くべきAutoMapperツールを初めて使用しています。モデルと対応するViewModelオブジェクト内のコレクションをマッピングするのが難しいです。オブジェクト内のオートマップコレクション
モデル:
public class VoteQuestion
{
public virtual ICollection<VoteAnswerOption> VoteAnswerOptions { get; set; }
}
対応のViewModel:
public class CreateVoteQuestionViewModel
{
public List<VoteAnswerOptionViewModel> PossibleAnswers { get; set; }
}
別のモデル:
public class VoteAnswerOption
{
public string Answer { get; set; }
}
と、対応するビュー
は簡単にするために、私は、コードをトリミングしていますモデル:
public class VoteAnswerOptionViewModel
{
public string Answer { get; set; }
}
「Startup.cs」のマイ・マッパーの設定。いくつかのオプションを試してみましたが、それはマッピングのコレクションを除いて他のすべてのものに役立ちました。
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();
});
そして最後に、私のコントローラのアクション内のマッピング:
var newQuestion = Mapper.Map<CreateVoteQuestionViewModel, VoteQuestion>(voteQuestion);
は、私が何をしないのですか?
私はそう思っていたので、両方のバージョンを試しましたが、いずれも私のために働いていませんでした。 – lucas