我正在尝试映射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),它的工作原理是因为通过名称自动化。但是如何在不同的类中使用不同属性名称(但相同类型)的现有格式。我不想在为每个子类编写映射时显式映射父属性。
答案 0 :(得分:1)
您需要使用包含方法告诉AutoMapper inheritance:
Mapper.CreateMap<SourceBase, DestBase>()
.Include<ChildSource, ChildDest>()
.ForMember(dest => dest.Success, opt => opt.MapFrom(source => source.IsSuccess));