Dotnet AutoMapper Flat模式到复杂的层次结构

问题描述

我有一个结构非常平坦的数据库表。好吧,一旦返回到dotnet中的对象,我想将结果查询创建为更结构化和层次化的格式。为此,我创建了几个模型类,它们代表我要如何组织返回的数据。例子

平面对象

Public class FlatObject {
   public string key1 {get; set;}
   public string key2 {get; set;}
   public string key3 {get; set;}
   public string key4 {get; set;}
}

结果对象

public class ResultObject {
   public Category1 category1 {get;set;}
   public Category2 category2 {get;set;}
   public Category3 category3 {get;set;}
}

CategoryExample

public class Category1 {
   public SubCategory1 sCategory1 {get;set;}
}

子类别

public class SubCategory1 {
   public string key1 {get;set;}
}

您会注意到此层次结构中有一些深层对象,而我试图将键从falt对象映射到这些深层嵌套的对象。我已经尝试过AutoMapper,但在映射对象深处却很费劲。关于如何实现此目标的任何见解?

解决方法

为了展开对象,请首先以相反的方向创建贴图,即展开。然后,添加ReverseMap(),您就可以开始了:

CreateMap<ResultObject,FlatObject>()
    .ForMember(
        d => d.key1,o => o.MapFrom(s => s.category1.sCategory1.key1))
    .ForMember(
        d => d.key2,o => o.MapFrom(s => s.category2.sCategory2.key2))
    .ForMember(
        d => d.key3,o => o.MapFrom(s => s.category3.sCategory3.key3))
    .ForMember(
        d => d.key4,o => o.MapFrom(s => s.category4.sCategory4.key4))
    .ReverseMap();