我有一个问题,我有以下对象:
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
。
提前致谢。
答案 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);