次のルールに従うオートマッパーマッピングを設定したいと思います。
- 「インプレース」宛先構文が使用されていない場合は、特定のメンバーを値にマップします
- オブジェクトが渡される場合は、宛先値を使用します
私はこれを考えられるあらゆる方法で試しました。このようなもの:
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メソッドに関するドキュメントがないようで、すべてのgoogle結果は、宛先ではなくソース値がnullである場所に焦点を合わせているように見えるため、非常にイライラします。
編集:
パトリックのおかげで、彼は私を正しい軌道に乗せてくれました。
私は解決策を見つけました。誰かがこれを行うためのより良い方法を持っているなら、私に知らせてください。dest.Parent.DestinationValue
ではなく参照する必要があることに注意してくださいdest.DestinationValue
。何らかの理由で、dest.DestinationValue
は常にnullです。
.ForMember(d => d.RowCreatedDateTime, o => o.Condition(d => dest.Parent.DestinationValue != null))
.ForMember(d => d.RowCreatedDateTime, o => o.UseValue(DateTime.Now))