web-dev-qa-db-ja.com

automapper createmapを両方の方法で作成する必要がありますか?

これはばかげた質問かもしれません! (AutoMapperへのn00bと時間-短い!)

AutoMapperを使用してEF4エンティティからViewModelクラスにマップしたいと思います。

1)電話したら

CreateMap<ModelClass, ViewModelClass>()

それから私も電話する必要がありますか

CreateMap<ViewModelClass, ModelClass>()

逆を実行するには?

2)2つのクラスのプロパティ名が同じである場合、CreateMapステートメントが必要ですか、それとも「特定の/カスタム」マッピング専用ですか?

41
BlueChippy

AutoMapperには、ソースタイプと宛先タイプがあります。したがって、対応するCreateMapがある場合にのみ、このソースタイプと宛先タイプの間でマッピングできます。だからあなたの質問に答えるために:

  1. 必要逆マッピングを定義する必要はありません。あなたがマップバックするつもりである場合にのみそれをしなければなりません。
  2. はい、CreateMapを呼び出して、これらのタイプがマップ可能であることを示す必要があります。そうしないと、Map<TSource, TDest>を呼び出すときに例外がスローされ、ソースタイプと宛先タイプの間にマッピングが存在しないことが通知されます。
15
Darin Dimitrov

この質問に出くわした人々の情報のために。 .ReverseMap()構成チェーンの最後にCreateMap()呼び出しを追加することにより、逆マッピングを実現する組み込みの方法があるようです。

114
Ivan Zlatev

拡張メソッドを使用して、両方の方法でマッピングを行いました

    public static IMappingExpression<TDestination, TSource> BothWays<TSource, TDestination>
        (this IMappingExpression<TSource, TDestination> mappingExpression)
    {
        return Mapper.CreateMap<TDestination, TSource>();
    }

使用法:

 CreateMap<Source, Dest>().BothWays();
8
Brian