尝试映射以下内容
public class WorkPreferance
{
public int ID { get; set; }
public string Name { get; set; }
public IEnumerable<Location> PreferedLocations { get; set; }
}
public class Location
{
public int LocationID { get; set; }
public string LocationName { get; set; }
}
到以下目的地...
public class WorkingPreferenceViewModel
{
public int ID { get; set; }
public string Name { get; set; }
public int LocationID { get; set; }
public string LocationName { get; set; }
}
但是我无法绕过应该是映射减速的东西。 到目前为止我有这个:
Mapper.Initialize(cfg =>
{
cfg.CreateMap<Location, WorkingPreferenceViewModel>()
.ForMember(d => d.LocationID, o => o.MapFrom(s => s.LocationID))
.ForMember(d => d.LocationName, o => o.MapFrom(s => s.Description))
.ForAllOtherMembers(o => o.Ignore());
cfg.CreateMap<WorkPreferance, WorkingPreferenceViewModel>()
.ForMember(d => d.LocationID, o => o.MapFrom(s => s.PreferedLocations))
.ForMember(d => d.LocationName, o => o.MapFrom(s => s.PreferedLocations))
}
答案 0 :(得分:0)
我担心AutoMapper无法做到这一点。它可以将单个对象映射到单个对象,将对象集合映射到对象集合。
您要做的是将单个对象映射到另一个对象的集合。我想不出你将如何使用AutoMapper实现这一目标。
但是,我必须说,我真的不明白为什么你这样定义了你的viewmodel。为什么要重复Id
和Name
这么多次?您建议的结构以何种方式变得更容易处理?
我要做的是创建LocationViewModel
,WorkingPreferenceViewModel
包含IEnumerable<LocationViewModel>
。这样,您可以通过在对象及其各自的视图模型之间创建地图,轻松地使用AutoMapper进行映射。它将巧妙地处理那里有一个集合的事实。