Automapper 6.2.2 有条件地展开?

Automapper 6.2.2 conditional unflattening?

我最近更新到最新版本的 Automapper (6.2.2) 以利用通过 .ReverseMap() 进行的展开。一切似乎都很顺利,直到我意识到它总是在创建一个空对象,而不管扁平化的源属性是否有值。完全可以理解,但为了防止这种情况,我尝试添加一个条件,如下所示:

cfg.CreateMap<Entity, DTO>()
    .ReverseMap()
        .ForMember(d => d.UnflattenedType, o => o.Condition(s => s.FlattenedId.HasValue));

虽然这似乎不起作用,但我一直在寻找解决方案太久了。

所以我的问题是,有没有办法在使用 ReverseMap 时有条件地阻止 automapper 初始化目标对象(展开)?

更新

我已经通过执行以下操作找到了解决方法,但我仍在寻找合适的解决方案。

cfg.CreateMap<Entity, DTO>()
    .ReverseMap()
        .AfterMap((s, d) => d.UnflattenedType = s.FlattenedId.HasValue ? d.UnflattenedType : null);

你试过 ForPath 了吗?

cfg.CreateMap<Entity, DTO>()
    .ReverseMap()
        .ForPath(d => d.UnflattenedType, o => o.MapFrom(s => s.FlattenedId.HasValue ? s.FlattenedId : null));

根据 Automapper 的开发人员的说法,从 6.2.2 版开始,这是不可能的。查看我在 GitHub 上发布的这个问题以获取更多信息:

https://github.com/AutoMapper/AutoMapper/issues/2498