使用AutoMapper对相邻列表模型进行数据映射
本文关键字:数据 映射 模型 列表 AutoMapper 使用 | 更新日期: 2023-09-27 17:58:18
所以有一个模型对象TreeNode
:
Public Class TreeNode{
Public int NodeId {get;set;}
Public String Name {get;set;}
Public int ParentId {get;set;}
Public TreeNode Parent {get;set;}
Public List<TreeNode> Children {get;set;}
}
该结构由使用邻接列表模式的数据库提供动力。我正在使用带有AutoMapper的WCF服务来填充我的Model类。
我想做这样的事情:
public static void ConfigureMappings()
{
Mapper.CreateMap<TreeNodeDto, Taxonomy>()
.AfterMap((s, d) =>
{
//WCF service calls to get parent and children
d.Children = Mapper.Map<TreeNodeDto[], TreeNode[]>(client.GetTreeChildren(s)).ToList();
d.Parent = Mapper.Map<TreeNodeDto, TreeNode>(client.GetTreeParent(s));
});
}
但很明显,这会导致一个无限循环(如果我只映射children tho,它确实有效)。有没有任何方法可以使用AutoMapper填充我的树结构?
我找到了这个部分解决方案。起初我以为这是我想要的,但经过进一步检查,只有从树的顶部开始,它才有效。如果从在中间开始,则不会填充父节点。
如何使用AutoMapper 将父引用分配给子对象中的属性
public static void ConfigureMappings()
{
Mapper.CreateMap<TreeNodeDto, Taxonomy>()
.AfterMap((s, d) =>
{
//WCF service calls to get parent and children
d.Children = Mapper.Map<TreeNodeDto[], TreeNode[]>(client.GetTreeChildren(s)).ToList();
foreach( var child in d.Children)
{
child.Parent = d;
}
}