具有递归映射的ThisMember Composite对象

时间:2014-05-27 07:23:41

标签: c# datamapper

我有一个问题,我有以下对象:

public class Category {
    public long Id { get; set; }
    public string Title { get; set; }
    public int MaxDepth { get; set; }

    public virtual Category Parent { get; set; }
    public virtual IList<Category> ChildrenNodes { get; set; }
}

我使用NHibernate为此检索数据,因为我的列表是LazyLoading, 它应重新映射到CategoryDTO btw:用于内部用途。

这就是DTO的样子...... (例如我并没有将所有内容都放在里面)

public class CategoryDTO {
    public long Id { get; set; }
    public string Title { get; set; }
    public virtual CategoryDTO Parent { get; set; }
    public IList<CategoryDTO> ChildrenNodes { get; set; }
}

我在 ThisMember 这里是对它的引用。

Btw thanks Julian great tool.

我正在使用我编写的这种扩展方法。

 public static TOut Map<TIn, TOut>(this TIn source)
        where TIn : class
        where TOut : new() {
        return Mapper.Map<TIn, TOut>(source);
 }

现在的问题是:

如何使用递归映射复合对象? 我没有在朱利安的例子中找到答案。

非常感谢任何帮助。

您可以建议其他地图制作者,但速度必须相等或更快ThisMember

提前致谢。

1 个答案:

答案 0 :(得分:1)

这应该相当容易:

var catDTO = new CategoryDTO {
  Title = "Parent",
  ChildrenNodes = new List<CategoryDTO> { new CategoryDTO { Title = "Child" }}
};            

var mapper = new MemberMapper();
mapper.CreateMap<CategoryDTO, Category>(category => new Category {
  ChildrenNodes = 
    category.ChildrenNodes == null ? null :
      category.ChildrenNodes.Select(c => mapper.Map<CategoryDTO, Category>(c)).ToList()
});

var mappedCategory = mapper.Map<CategoryDTO, Category>(catDTO);