我有一个奇怪的案例,对于AutoMapper来说我还很陌生,我不知道发生了什么。
我有两节课
public class Person
{
public List<Friend> Friends {get;set;}
}
public class PersonView : Person
{
public new List<FriendView> Friends {get;set;}
}
和地图
Mapper.CreateMap<Person, PersonView>().ForMember(d => d.Friends,
o => o.ResolveUsing<FriendViewResolver>().FromMember(s => s.Friends));
但是,我也有这张地图,它有自己的地图:
Mapper.CreateMap<Friend, FriendView>().ForMember(/* a lot of stuff */);
现在,在FriendViewResolver内部-我为每个Mapper.Map<Friend, FriendView>()
调用Mapper.Map<Friend, FriendView>()
。 但是由于某种原因,它运行后,某些属性会丢失,并且由于跳过代码,似乎AutoMapper在列表上进行了第二遍处理。
我想让FriendViewResolver
在列表上运行,因为它正在对整个Friends
集合进行递归操作,但是我不明白为什么如果成员有一个解析器规则,则AM要第二遍通过。
我真的希望这有意义。
编辑:当我运行Mapper.Map<Person, PersonView>();
会发生问题Mapper.Map<Person, PersonView>();
,我看到它运行FriendViewResolver
并具有正确的结果,但是调试器中的下一步再次运行地图并弄乱了已映射的对象。