自动映射 - 当源对象具有值的属性时,不映射

时间:2017-06-08 21:17:35

标签: c# automapper

我们的实体有一个名为“DateDeleted”的字段。有时我们可能会将这些加载到实体中,我们希望在将它们发送到客户端之前将其过滤掉。

我们的实体还有子实体,它们都有子实体,所有子实体都有DateDeleted。

使用Automapper实现此功能的最佳做法是什么 - 具体来说 - 当源具有带有值的Date Deleted属性时,如何将Null值映射到目标(对于整个对象)?

1 个答案:

答案 0 :(得分:3)

配置映射时可以忽略特定属性

CreateMap<srcType, destType>.ForMember(x => x.DateDeleted, opt => opt.Ignore());

编辑: 要在映射期间执行自定义条件逻辑,您需要实现自定义解析器:

public class NullCheckResolver : IValueResolver<TSrc, TDest, TProp>
{
    public TProp Resolve(TSrc source, TDest destination, TProp member, ResolutionContext context)
    {
        if (member.DateDeleted == null)
            return member;
        return null;
    }
}

CreateMap<TSrc, TDest>().ForMember(dest => dest.MyOptionalProperty, opt => opt.ResolveUsing<NullCheckResolver>());

有关自定义解析程序的详细信息,请参阅AutoMapper documentation