自动映射两级映射

时间:2014-05-12 15:06:59

标签: c# .net mapping automapper automapping

我的AutoMapper配置有问题,我可以映射一个级别,但我不知道是否存在映射两个级别的方法

我有:

Class A 
{
    public int id {get; set;}
    public string nom {get; set;}
    public B Bprop {get; set;}
}

Class B
{
    public int id {get; set;}
    public string nom {get; set;}
    public C Cprop {get; set;}
}

Class C 
{
    public int id {get; set;}
    public string nom {get; set;}
}

我的配置代码如下所示,如果我从Cprop删除class B,它就有效:

 MapperTools<DatabaseA, A> mapperToolsService =
     new MapperTools<DatabaseA, A>(MappingHelper);

 mapperToolsService.MappingConfig.Configuration.CreateMap<DatabaseA, A>()
     .ForMember(dest => dest.Bprop , opt => opt.MapFrom(src => src.DatabaseB));

 mapperToolsService.MappingConfig.Configuration.CreateMap<DatabaseB,B>();

请问,我的代码出了什么问题?

1 个答案:

答案 0 :(得分:1)

实际上这是三级映射。

为B类添加C级映射。 扩展B类的映射以涵盖Cprop。

假设DatabaseX的Xprop字段对应于目标类(A,B,C)中的Xprop字段,它应该如下所示:

Mapper.CreateMap<DatabaseA, A>()
  .ForMember(dest => dest.Bprop , opt => opt.MapFrom(src => src.Bprop));

Mapper.CreateMap<DatabaseB,B>()
  .ForMember(dest => dest.Cprop , opt => opt.MapFrom(src => src.Cprop));

Mapper.CreateMap<DatabaseC, C>();

以下是工作示例:https://github.com/st4hoo/Automapper3LevelMappingExample