繁体   English   中英

使用 IncludeMembers 时排除所有父属性

[英]Exclude all parent properties when using IncludeMembers

public sealed class LookupDetails
{
    public long Id { get; set; }

    public string Name { get; set; }
}

public sealed class File
{
    public long Id { get; set; }

    public string Name { get; set; }
}

public sealed class UserFile
{
    public long Id { get; set; }

    public File File { get; set; }
}

CreateMap<UserFile, LookupDetails>()
   .IncludeMembers(x => x.File);

CreateMap<File, LookupDetails>();

我想让它作为投影, UserFile.File.Id => LookupDetails.IdUserFile.File.Name => LookupDetails.Name ,但它需要Id来自UserFile.Id

我试过ForAllMembers(x => x.Ignore())ForAllOtherMembers(x => x.Ignore()) - 没有帮助。

另外,我使用的是可查询的扩展,所以我仅限于基于表达式的配置。

我认为您需要手动映射吗? 这有帮助吗?

CreateMap<UserFile, LookupDetails>()
    .ForMember(lookupDetails => lookupDetails.Id, options => options.MapFrom(userFile => userFile.File.Id))

编辑:

这个映射看起来很奇怪(而且有点奇怪)。 人们可能希望让事情变得简单易懂。 具有实际上是文件 ID 的 Id 的LookupDetails选项可能并不简单。

如果这是一个选项,请尝试简化模型结构。 让每个实体都有自己的 ID,该 ID 与其他 ID 分开。 例如, LookupDetails.IdLookupDetails.FileId

您在滥用IncludeMembers 您只需要

CreateMap<UserFile, LookupDetails>().ConvertUsing((s, _, context) => context.Mapper.Map<LookupDetails>(s.File));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM