条件上的Automapper成员映射似乎很复杂

本文关键字:很复杂 映射 成员 Automapper 条件 | 更新日期: 2023-09-27 18:08:53

我正试图找到正确的方法来实现这一点。

 return isOptionTrue? Mapper.Map<Context>(myObject) : Mapper.Map<ReplayContext>(myObject);

Context有我实际需要的所有字段。

public class ContextReplay: Context
{
    //This class is a work around to trick Automapper
}

当然映射

Mapper.CreateMap<myObject, Context>()
      .ForMember(x => x.Id, opt => opt.MapFrom(y => y.Id))
      .ForMember(x => x.Name, opt => opt.MapFrom(y => y.Name));
      .ForMember(x => x.Important, opt => opt.MapFrom(y => y.NormalProp));

Mapper.CreateMap<myObject, ContextReplay>()
      .ForMember(x => x.WellId, opt => opt.MapFrom(y => y.Id))
      .ForMember(x => x.Name, opt => opt.MapFrom(y => y.Name));
      .ForMember(x => x.Important, opt => opt.MapFrom(y => y.ReplayProp));

如你所见,我真的想要:

Mapper.CreateMap<myObject, Context>()
      .ForMember(x => x.WellId, opt => opt.MapFrom(y => y.Id))
      .ForMember(x => x.Name, opt => opt.MapFrom(y => y.Name));
      .ForMember(x => x.Important, opt => opt.MapFrom(y => isOptionTrue? y.NormProp: y.ReplayProp));

对于问题:是的,我有一个空子类,因为我有两个唯一的MyObject到上下文映射。这整件事看起来就像一个超级黑鬼。我无法想象他们真的不支持这样的事情,但我很困惑。我不知道如何让我的bool与它一起传递

条件上的Automapper成员映射似乎很复杂

也许我的想象力有限,但我个人认为"自动映射"的用途有限,除非在两个"相同"的类之间进行映射。维护下面的代码不是更直接、更快、更容易吗?

var context = new Context {
    WellId = myObject.Id,
    Name = myObject.Name,
    Important = (isOptionTrue ? myObject.NormProp : myObject.ReplayProp)
};