3

次のルールに従うオートマッパーマッピングを設定したいと思います。

  • 「インプレース」宛先構文が使用されていない場合は、特定のメンバーを値にマップします
  • オブジェクトが渡される場合は、宛先値を使用します

私はこれを考えられるあらゆる方法で試しました。このようなもの:

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

1 に答える 1

4

2つのマッピングを設定する必要があると思います。1つは(マッピングを実行するかどうかを決定する)を使用し、もう1つはtrueが返さConditionれた場合の処理​​を定義します。Conditionこのようなもの:

.ForMember(d => d.RowCreatedDateTime, o => o.Condition(d => d.DestinationValue == null);
.ForMember(d => d.RowCreatedDateTime, o => o.UseValue(DateTime.Now));
于 2012-09-14T12:32:10.657 に答える