我有一个对象,我们称之为Parent,其中包含Sons和Daughters的集合。
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; }
}
让我们假设有来回映射的Model类和Data类。
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();
}
我忽略了每个Son和Daughter上的Parent,然后将Parent映射到Parent的AfterMap中的每个Son和Daughter。这就是我在设置它的一个例子中所做的工作。
我可以拉一个父母,儿子和女儿的收藏回来了,我可以使用它们所有这些,这就是我想要的。我可以拉儿子或女儿,父母回来。
我遇到的问题是拉回东西,然后发回去保存它。当我创建一个新的Parent然后添加Sons或Daughters时,我可以保存新的Parent并保存Sons和Daughters以及所有内容,但是当我从数据库中撤回父,子或者女儿并更改某些内容时尝试将其发回,它在Models.Parent =&gt;的映射下失败并出现Stack Overflow异常。 Data.Parent。
当我拉数据时,精确映射Data.Parent =&gt; Models.Parent ......那么为什么失败?
数据类是EF生成的,模型类只是放置在不同层中的数据类的副本。
答案 0 :(得分:1)
您需要在反向地图(模型 - &gt;数据)中配置Mapper.Initialize(cfg =>
{
cfg.CreateMap<Data.Parent, Models.Parent>().AfterMap((src, dest) =>
{
foreach (var i in dest.Sons)
i.Parent = dest;
foreach (var i in dest.Daughters)
i.Parent = dest;
})
.ReverseMap().AfterMap((src, dest) =>
{
foreach (var i in dest.Sons)
i.Parent = dest;
foreach (var i in dest.Daughters)
i.Parent = dest;
});
cfg.CreateMap<Data.Son, Models.Son>()
.ForMember(m => m.Parent, opt => opt.Ignore())
.ReverseMap()
.ForMember(m => m.Parent, opt => opt.Ignore());
cfg.CreateMap<Data.Daughter, Models.Daughter>()
.ForMember(m => m.Parent, opt => opt.Ignore())
.ReverseMap()
.ForMember(m => m.Parent, opt => opt.Ignore());
});
成员的方式与数据相同 - &gt;模型图:
jQuery(document).ready(function($) {
jQuery('.woocommerce-product-gallery__image img').click(function(e) {
e.preventDefault();
var src = jQuery(this).attr('src');
var srcset = jQuery(this).attr('srcset');
var alt = jQuery(this).attr('alt');
alert(srcset);
jQuery('.images .zoom .wp-post-image').attr('src', src);
jQuery('.images .zoom .wp-post-image').attr('srcset', srcset);
jQuery('.images .zoom .wp-post-image').attr('alt', alt);
});
});