如何使用AutoMapper将三个或N个复杂对象映射到一个对象

时间:2014-07-09 13:36:15

标签: automapper automapper-2 automapper-3

我是AutoMapper框架的新手。我有三到五个复杂的对象,必须映射到一个对象

例如,ChipInfo,HardDiskInfo,MonitorInfo,MemoryCardInfo必须映射到LaptopInfo,因为LaptopInfo对象具有必须从所有四个对象填充的字段。

如何使用AutoMapper实现这一目标。我无法找到任何答案,这些答案允许我使用.ForMember对四个对象进行CreateMap。请帮忙谢谢

以下是更新的代码

public class AutoMapperConfig
{
   Mapper.Initialize(x =>
    {
         x.AddProfile<chipInfoMapperProfile>();
         x.AddProfile<(hardDiskInfoMapperProfile>();
         x.AddProfile<monitorInfoMapperProfile>();
         x.AddProfile<memoryCardInfoMapperProfile>();
                });
}


public class chipInfoMapperProfile : Profile
    {
        protected override void Configure()
        {
            Mapper.CreateProfile(Profiles.ChipProfileName).CreateMap<chipInfo, laptopInfo>()
                  .ForMember(x => x.LapTopChipProperty, opt => opt.MapFrom(source => source.ChipProperty));
        }
    }

public class hardDiskInfoMapperProfile : Profile
    {
        protected override void Configure()
        {
            Mapper.CreateProfile(Profiles.hardDiskProfileName).CreateMap<hardDiskInfo, laptopInfo>()
                  .ForMember(x => x.LaptopHardDiskProperty, opt => opt.MapFrom(source => source.HardDiskProperty));
        }
    }

public class monitorInfoMapperProfile: Profile
    {
        protected override void Configure()
        {
            Mapper.CreateProfile(Profiles.monitorInfoProfileName).CreateMap<monitorInfo, laptopInfo>()
                  .ForMember(x => x.LaptopMonitorInfoProperty, opt => opt.MapFrom(source => source.MonitorInfoProperty));
        }
    }

1 个答案:

答案 0 :(得分:1)

如果为这些组合中的每一个创建映射,则可以使用允许映射到现有对象的重载。 Here's an example

您的代码可能如下所示:

var laptopInfo = new LaptopInfo();

Mapper.Map(chipInfo, laptopInfo);
Mapper.Map(hardDiskInfo, laptopInfo);
Mapper.Map(monitorInfo, laptopInfo);
Mapper.Map(memoryCardInfo, laptopInfo);

基本上,您只需将映射应用于每个源对象的现有/目标对象。