用于列表方案的AutoMapper似乎只重复映射列表中的第一个对象

时间:2013-06-24 05:06:21

标签: c# asp.net-mvc automapper

我正在开发一个MVC 3应用程序,并使用AutoMapper在我的ViewModel和我的实体之间移动数据。我有一个场景,我需要在两个列表之间移动数据。出于某种奇怪的原因,AutoMapper似乎只复制源对象中的第一个对象,然后似乎将同一个对象复制n次到目标列表。例如,假设您有2个列表,源包含6个实体项,而目标包含0个项,因为它刚刚实例化。位置源[0]的项目被复制到目的地,然后源代码[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);

2 个答案:

答案 0 :(得分:4)

所以,这是一个合适的解决方案,但不是我们在使用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。

答案 1 :(得分:1)

对于遇到此问题的其他人来说,好像文档不适合我。一位同事提出了以下建议:

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

它就像一个魅力。