c# - 自动映射器中的多个映射
问题描述
我最近遇到了一个自动映射器。我有一个问题,如何将我的存储库中的多个对象映射到一个 DTO 中。
public QuestionProfile()
{
CreateMap<Question, GrammarQuestionDTO>()
.ForMember(g => g.Question, q => q.MapFrom(source => source.Text)).ReverseMap();
CreateMap<List<GrammarQuestionDTO>, TestDTO>()
.ForMember(t => t.GrammarQuestion, g => g.MapFrom(source => source)).ReverseMap();
CreateMap<Question, AuditionQuestionDTO>()
.ForMember(a => a.Question, q => q.MapFrom(source => source.Text))
.ForMember(a => a.Url, q => q.MapFrom(source => source.AudioFile.Url)).ReverseMap();
CreateMap<List<AuditionQuestionDTO>, TestDTO>()
.ForMember(t => t.AuditionQuestion, a => a.MapFrom(source => source)).ReverseMap();
}
如何映射所有这 4 个对象?
public async Task<TestDTO> GenerateTest(LevelType level)
{
var grammarQuestions = await _questionRepository.GetGrammarQuestionAsync(level);
var auditionQuestions = await _questionRepository.GetAuditionQuestionAsync(level);
var essayTopic = await _questionRepository.GetEssayTopicAsync(level);
var speakingTopic = await _questionRepository.GetSpeakingTopicAsync(level);
var test = _mapper.Map<TestDTO>(grammarQuestions);
test = _mapper.Map(test, auditionQuestions); //there will be a conversion error
return _mapper.Map<TestDTO>(grammarQuestions);
}
解决方案
您需要在没有列表的情况下对其进行映射,只需将其一一映射并AutoMapper
处理集合:
CreateMap<AuditionQuestionDTO, TestDTO>()
.ForMember(t => t.AuditionQuestion,
a => a.MapFrom(source => source.<PropertyName>)).ReverseMap();
然后在地图上你应该:
test = _mapper.Map<List<AuditionQuestionDTO>>(test, auditionQuestions);
推荐阅读
- rust - Tokio core.run 无法编译。出现错误:特性 `futures::future::Future` 未针对 `impl futures::Future` 实现
- angular - Angular9 - 检查 Firebase 用户当前是否已登录
- android - MotionLayout 中的两个 Recycler 视图会产生问题
- python - 存储灰度视频的像素值,对它们进行平均,然后显示生成的视频
- azure-devops - Terraform 与私有 git repo / azure devops
- javascript - 提交后的表单未定义“this”,但反应中的按钮未定义
- ruby-on-rails - 使用 Capistrano 的 Rails 6 部署设置
- c++ - C++ 泛型类,为什么需要 .cpp 文件?
- reactjs - 使用反应将对象内的数组渲染到表中
- java - Mockito.when 在测试方法体内不起作用