3

我正在开发一个 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);
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 回答