我有一個奇怪的案例,我對AutoMapper很新,我不明白髮生了什麼。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>()
。但由於某些原因,在運行之後,一些屬性會丟失,並且從代碼中跳過,似乎AutoMapper會在列表中進行第二次傳遞。
我想讓FriendViewResolver
在列表上運行,因爲它正在對Friends
的整個集合進行遞歸調整,但我不明白爲什麼AM會在成員有解析器規則的情況下進行第二次傳遞。
我真的很希望它有道理。
編輯:問題發生在我運行Mapper.Map<Person, PersonView>();
時,我看到它運行FriendViewResolver
並且結果正確,但調試器中的下一步再次運行映射並混淆已映射的對象。
不,我提到爲什麼我需要'FriendViewResolver' - 它需要在整個列表上運行,我不能做1對1映射 – Madd0g
如果是這樣的話,你需要''映射聲明?如果你刪除它(暫時的,用於測試),那麼''映射是否按預期工作? –
hawkke
我需要創建該映射,我在'FriendViewResolver'中手動調用它。沒有它'FriendViewResolver'不能保留結果(因爲輸入類型不同),所以有一個不同的問題 – Madd0g