我正在开发一个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);
答案 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));
它就像一个魅力。