私はあらゆる場所を探しました: stackoverflow、automapper ドキュメント、インターネットですが、これは非常に一般的な問題のようですが、この問題に関する情報はまったく見つかりませんでした。
私のマッピング:
CreateMap<StatusLevelDTO, StatusLevel>()
.ForAllMembers(opt => opt.Condition(src => src != null));
これは、src がソース プロパティ (私の考えでは) ではなくソース オブジェクト (StatusLevelDTO) を表しているため機能しません。
具体的には、ObjectA を ObjectB にマップする場合、ObjectA.SomeValue は null で、ObjectB.SomeValue は 2 なので、宛先オブジェクトの値 (2) を保持します。
こんな質問を見たことがあります:Automapper はカスタム リゾルバを使用して null 値をスキップします最初の 2 つの回答を試しましたが、どちらもバージョン 6 では古くなっているようです。
Automapper 6 でこれを実現する方法はありますか? 正確には 6.0.2 を使用しています。
ベストアンサー1
方法Condition
現在5つのオーバーロードがあり、そのうちの1つは型の述語を受け入れます
Func<TSource, TDestination, TMember, bool>
この TMember パラメータはソース メンバーです。したがって、ソース メンバーが null かどうかを確認できます。
CreateMap<StatusLevelDTO, StatusLevel>()
.ForAllMembers(opts => opts.Condition((src, dest, srcMember) => srcMember != null));