我有一个从实体框架
Software
模型到 SoftwareDTO
的映射设置,当我像这样投影到它时,它可以正常工作:
var stuff = await ChecklistLink.AsNoTracking()
.Select(x => x.Software)
.ProjectTo<SoftwareDTO>(config)
.Distinct()
.ToArrayAsync(cancellationToken);
我想跳过那里的选择并能够直接从
ChecklistLink
投影到dto,所以我添加了这张地图:
CreateMap<ChecklistLink, SoftwareDTO>()
.ConstructUsing((entity, ctx) => ctx.Mapper.Map<SoftwareDTO>(entity.Software));
如果我现在注释掉
.Select(x => x.Software)
行,我不会得到任何结果。我需要做哪些不同的事情?
作为一种技巧,你可以使用扁平化:
cfg.CreateMap<ChecklistLink, SoftwareDTO>()
.IncludeMembers(src => src.Software);
此外,如果仅可查询投影需要映射,请考虑使用
CreateProjection
而不是 CreateMap
(有关更多详细信息,请参阅此答案)。