使用AutoMapper映射2个父类

时间:2013-11-18 12:15:14

标签: automapper

我正在尝试映射2个继承不同基类的类(但具有公共属性)。当我使用Map时,父属性不会自动映射(我认为应该基于inhertiance定律)。请告诉我在某处是否错了:

  public class SourceBase
{
    public bool IsSuccess { get; set; }
}

public class DestBase
{
    public bool Success { get; set; }
}

public class ChildSource : SourceBase
{
    public string SourceName { get; set; }
}

public class ChildDest : DestBase
{
    public string DestName { get; set; }
}

创建地图

 AutoMapper.Mapper.CreateMap<SourceBase, DestBase>()
                  .ForMember(dest => dest.Success, opt => opt.MapFrom(source => source.IsSuccess));

 AutoMapper.Mapper.CreateMap<ChildSource, ChildDest>()
                  .ForMember(dest => dest.DestName,opt=>opt.MapFrom(source=>source.SourceName));

使用地图

ChildSource ch = new ChildSource()
            {
                IsSuccess = true,
                SourceName = "user1"
            };

        var obj = AutoMapper.Mapper.Map<ChildDest>(ch);

我希望IsSuccess为True,DestName为user1。但只有SourceName被设置并且IsSuccess保持为false。如果我在两者中使用相同的名称(IsSuccess),它的工作原理是因为通过名称自动化。但是如何在不同的类中使用不同属性名称(但相同类型)的现有格式。我不想在为每个子类编写映射时显式映射父属性。

1 个答案:

答案 0 :(得分:1)

您需要使用包含方法告诉AutoMapper inheritance

Mapper.CreateMap<SourceBase, DestBase>()
    .Include<ChildSource, ChildDest>()
    .ForMember(dest => dest.Success, opt => opt.MapFrom(source => source.IsSuccess));