1
我有一個對象,我們稱之爲父對象,其中包含兒子和女兒的集合。Automapper將對象與集合映射
public class Parent {
ICollection<Son> ParentsSons { get; set; }
ICollection<Daughter> ParentsDaughters { get; set; }
}
public class Son {
public Parent Parent { get; set; }
}
public class Daughter{
public Parent Parent { get; set; }
}
讓我們假設有模型類和數據類來回映射。
Mapper.Initialize(cfg =>
{
cfg.CreateMap<Data.Parent, Models.Parent>() .AfterMap((src, dest) =>
{
foreach (var i in dest.Sons)
i.Son = dest;
foreach (var i in dest.Daughters)
i.Daughters = dest;
})
.ReverseMap();
cfg.CreateMap<Data.Son, Models.Son>().ForMember(m => m.Parent, opt => opt.Ignore()).ReverseMap();
cfg.CreateMap<Data.Daughter, Models.Daughter>().ForMember(m => m.Parent, opt => opt.Ignore()).ReverseMap();
}
我無視每個兒子和女兒的父母,然後將父母映射到父母的AfterMap中的每個兒子和女兒。這是我在一個示例中完成的工作,我正在設置它。
我可以拉一個家長,兒子和女兒的收藏品回來了,我可以使用它們,所有這一切,那就是我想要的。我可以拉一個兒子或女兒,父母回來。
我遇到的一個問題是將某些東西拉回來,然後將其返回以保存它。當我創建一個新的父母,然後添加兒子或女兒時,我可以保存這個新的父母,並且保存兒子和女兒以及所有的東西,但是當我從數據庫中拉回父母,兒子或女兒時,嘗試將其發回,它會在Models.Parent => Data.Parent的映射中出現Stack Overflow異常。
當我拉的數據是做了很好的映射Data.Parent => Models.Parent ...那麼爲什麼失敗?
數據類是EF生成的,模型類只是放置在不同圖層中的數據類的副本。
哦,你是在開玩笑吧? –
我的意思是,你在開玩笑說這很容易。它是有道理的,但我只是有點想到'ReverseMap()'做了相反的事情,對於所有這一切。 –
無手動操作我得到了與原始帖子中一樣的'StackOverflowException'。代碼看起來相同,但實際上在'ReverseMap'之後的部分中,交換了'src'和'dest'。 –