gpt4 book ai didi

AutoMapper:在目标基础上映射源属性

转载 作者:行者123 更新时间:2023-12-04 05:42:33 24 4
gpt4 key购买 nike

这是我需要映射的两个类,位于左侧:

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));

最佳答案

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

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

关于AutoMapper:在目标基础上映射源属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11105266/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com