1. ホーム
  2. c#

[解決済み] マップされているメンバー以外のすべての宛先メンバーを無視するにはどうすればよいですか?重複

2023-07-03 04:31:50

質問

このような方法はあるのでしょうか?3つの型からマッピングするSummaryDtoがあるのですが、それぞれの型に対してマップを作成すると、マッピングされていないプロップがエラーを投げてしまいます。Summary Dtoには約35の属性があります。それぞれにIgnore()オプションを使用するのは面倒です。グローバルな無視はないのでしょうか?例えば

CreateMap<Source,Target>()
   .IgnoreAllUnmapped();

どのように解決するのですか?

これは私のために動作しています。

public static class MappingExpressionExtensions
{
    public static IMappingExpression<TSource, TDest> IgnoreAllUnmapped<TSource, TDest>(this IMappingExpression<TSource, TDest> expression)
    {
        expression.ForAllMembers(opt => opt.Ignore());
        return expression;
    }
}

なぜなら ForAllMembersvoid を呼び出すと ForAllMembers(o => o.Ignore()) を呼び出すと、この拡張メソッドは動作しません。後続のマッピングを有効にするために、マッピング式を利用できるようにしておきたいのです。

CreateMap<Source, Destination>()
            .IgnoreAllUnmapped()
            .ForMember(d => d.Text, o => o.MapFrom(s => s.Name))
            .ForMember(d => d.Value, o => o.MapFrom(s => s.Id));