AutoMapper:在目标库上映射源属性

时间:2012-06-19 16:25:51

标签: automapper

以下是我需要映射的两个类,左侧是:

class HumanSrc {
    public int IQ;
    public AnimalSrc Animal;
}
class AnimalSrc {
    public int Weight;
}
右侧的

是相同的对象,但使用继承组成:

class HumanDst : AnimalDst {
   public int IQ;
}
class AnimalDst {
    public int Weight;
}

所以我需要的映射是:

humanSrc.IQ -> humanDst.IQ 
humanSrc.Animal.Weight -> humanDst.Weight;

我可以很容易地明确地进行这种映射,但是我有几个类都派生自Animal,而Animal类很大,所以我更喜欢映射Animal一次,然后将它包含在每个派生类映射中。

我看了.Include<>方法,但我认为它不支持这种情况。

以下是我要寻找的内容(伪代码):

// define animal mapping
var animalMap = Mapper.CreateMap<AnimalSrc, AnimalDst>().ForMember(dst=>dst.Weight, opt=>opt.MapFrom(src=>src.Weight);
// define human mapping
var humanMap = Mapper.CreateMap<HumanSrc, HumanDst>();
humanMap.ForMember(dst=>dst.IQ, opt=>opt.MapFrom(src=>src.IQ));

// this is what I want. Basically I want to say:
// "in addition to that, map this child property on the dst object as well"
humanMap.ForMember(dst=>dst, opt=>opt.MapFrom(src=>src.Entity));

1 个答案:

答案 0 :(得分:3)

作为一种解决方法,您可以使用映射基类添加BeforeMap。可能它不是最好的解决方案,但至少需要较少的映射配置:

humanMap.BeforeMap((src, dst) =>
{
   Mapper.Map(src.Animal, (AnimalDst)dst);
});