3

MVC 3 アプリケーションを開発しており、AutoMapper を使用して ViewModel とエンティティの間でデータを移動しています。2 つのリスト間でデータを移動する必要があるシナリオがあります。奇妙な理由で、AutoMapper はソース オブジェクトから最初のオブジェクトのみをコピーし、次に同じオブジェクトを n 回コピーして宛先リストにコピーするように見えます。たとえば、2 つのリストがあり、ソースには 6 つのエンティティ アイテムが含まれ、デスティネーションにはインスタンス化されたばかりであるため、0 アイテムが含まれているとします。source[0] の位置にあるアイテムがコピー先にコピーされ、次に source[0] がコピー元リストにあるアイテムと同じ数 (この場合は 6) だけ繰り返しコピーされます。この原因。

AutoMapper 構成ファイルは次のとおりです。

public static class AutoMapperConfigurator
{
    public static void Configure()
    {
        Mapper.CreateMap<User, UserModel>();
        Mapper.CreateMap<Posting, PostingModel>();
    }
}

これがGlobal.asaxファイルの設定です

protected void Application_Start()
{
    AutoMapperConfigurator.Configure();
}

Map メソッドを呼び出している場所は次のとおりです。

userSearchModel.UserList = Mapper.Map<IList<User>, IList<UserModel>>(userEntities);
4

2 に答える 2

5

したがって、適切な解決策ですが、AutoMapper を使用するときに私たちが望むものではありません。

この問題は、マッピングされているエンティティ/モデルの Equals メソッドを誤ってオーバーライドした場合によく発生します。

たとえば、上記のオブジェクトのリストをマップしようとすると、 から最初のオブジェクトだけが取得されますSourceEntity

    public class SourceEntity 
    {
         public string MyField {get; set;}         

         public override bool Equals(object obj)
         {
              return true;
         }
    }

    public class TargetEntity 
    {
          public string MyField {get; set;}  
    }

Equals メソッドが true を返すことを確認します。

于 2015-01-30T19:31:31.103 に答える
1

この問題を抱えている他の人にとっては、ドキュメントが機能していないように見えます。同僚は次の提案をしました。

userSearchModel.UserList = UserEvent.Select(item => Mapper.Map<User, UserListModel>(item));

それは魅力のように機能しました。

于 2013-06-25T10:10:46.047 に答える