【发布时间】:2017-05-17 02:46:29
【问题描述】:
我有一个对象,我们称它为 Parent,其中包含儿子和女儿的集合。
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 生成的,模型类只是放置在不同层中的数据类的副本。
【问题讨论】:
标签: c# entity-framework automapper