列表场景的AutoMapper似乎只重复映射列表中的第一个对象
本文关键字:列表 一个对象 映射 AutoMapper | 更新日期: 2023-09-27 18:19:33
我正在开发一个MVC 3应用程序,并使用AutoMapper在ViewModels和实体之间移动数据。我有一个场景,需要在两个列表之间移动数据。出于某种奇怪的原因,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();
}
这是我调用地图方法的位置
userSearchModel.UserList = Mapper.Map<IList<User>, IList<UserModel>>(userEntities);
因此,这是一个合适的解决方案,但不是我们在使用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。
对于其他有这个问题的人来说,文档似乎对我不起作用。一位同事提出了以下建议:
userSearchModel.UserList = UserEvent.Select(item => Mapper.Map<User, UserListModel>(item));
它就像一个符咒。