2013-02-08 2 views
0

Так что есть модель объекта TreeNode:Отображение данных смежности Список модели с AutoMapper

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;} 
} 

Эта структура работает от баз данных с использованием Adjacency List Pattern. Я использую службу WCF с 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(); 
    d.Parent = Mapper.Map<TreeNodeDto, TreeNode>(client.GetTreeParent(s)); 
    }); 
} 

Но, очевидно, это вызывает бесконечный цикл (он будет работать, если я только карта дети Тхо). Есть ли способ заполнить мою древовидную структуру с помощью AutoMapper?

ответ

0

Я нашел это частичное решение. Сначала я, хотя это было то, что я искал, но после дальнейшей проверки это работает, только если вы начинаете в верхней части дерева. Он не заполняет родительские узлы, если вы начинаете посередине.

How to assign parent reference to a property in a child with 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; 
    } 
} 
+0

Ну. при дальнейшем осмотре я понимаю, что это решение работает только в том случае, если вы начинаете с вершины дерева. – NSjonas

Смежные вопросы