我想设置一个遵循以下规则的 Automapper 映射。
- 如果未使用“就地”目标语法,则将特定成员映射到值
- 如果传入一个对象,则使用目标值
我已经尝试了所有我能想到的方法。像这样的东西:
Mapper.CreateMap<A, B>()
.ForMember(dest => dest.RowCreatedDateTime, opt => {
opt.Condition(dest => dest.DestinationValue == null);
opt.UseValue(DateTime.Now);
});
这总是映射值。基本上我想要的是:
c = Mapper.Map<A, B>(a, b); // does not overwrite the existing b.RowCreatedDateTime
c = Mapper.Map<B>(a); // uses DateTime.Now for c.RowCreatedDateTime
注意:A 不包含 RowCreatedDateTime。
我在这里有什么选择?这非常令人沮丧,因为似乎没有关于 Condition 方法的文档,并且所有谷歌结果似乎都集中在源值为 null 的位置,而不是目标位置。
编辑:
多亏了帕特里克,他让我走上了正轨。
我想出了一个解决办法。如果有人有更好的方法,请告诉我。注意我必须引用dest.Parent.DestinationValue
而不是dest.DestinationValue
. 出于某种原因,dest.DestinationValue
始终为空。
.ForMember(d => d.RowCreatedDateTime, o => o.Condition(d => dest.Parent.DestinationValue != null))
.ForMember(d => d.RowCreatedDateTime, o => o.UseValue(DateTime.Now))