代码之家  ›  专栏  ›  技术社区  ›  Kurt Pinette

Automapper 6.2.2有条件取消融资?

  •  0
  • Kurt Pinette  · 技术社区  · 7 年前

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

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

    但这似乎不起作用,我已经寻找解决方案太久了。

    所以我的问题是,有没有一种方法可以有条件地防止AutoMaper在使用ReverseMap时初始化目标对象(取消平台)?

    更新

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

    cfg.CreateMap<Entity, DTO>()
        .ReverseMap()
            .AfterMap((s, d) => d.UnflattenedType = s.FlattenedId.HasValue ? d.UnflattenedType : null);
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   Kurt Pinette    7 年前

    据Automapper的开发人员称,从版本6.2.2开始,这是不可能的。查看我在他们的GitHub上发布的这个问题,了解更多信息:

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

        2
  •  0
  •   ngruson    7 年前

    你试过ForPath吗?

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