我有一大堆的DTO类,从这个CardBase
继承:Automapper:如何不从复杂类型重复映射配置基类
// base class
public class CardBase
{
public int TransId {get; set; }
public string UserId { get; set; }
public int Shift { get; set; }
}
// one of the concrete classes
public class SetNewCardSettings : CardBase
{
// specific properties ...
}
在我的MVC项目我有一个一帮视图模型AuditVm
复杂类型,有CardBase
相同的属性:
public class AuditVm
{
public int TransId {get; set; }
public string UserId { get; set; }
public int Shift { get; set; }
}
public class CreateCardVm : CardVm
{
// specific properties here ...
public AuditVm Audit { get; set }
}
这些视图模型不能从AuditVm
继承,因为他们每个人已经有母。我认为我可以像下图一样设置我的映射,因此我不必为AuditVm
为复杂类型的每个视图模型指定从AuditVm
到CardBase
的映射。但它不起作用。我如何正确地从复杂类型映射到具有基类属性的扁平类型?
Mapper.CreateMap<AuditorVm, CardBase>()
.Include<AuditorVm, SetNewCardSettings>();
// this does not work because it ignores my properties that I map in the second mapping
// if I delete the ignore it says my config is not valid
Mapper.CreateMap<AuditorVm, SetNewCardSettings>()
.ForMember(dest => dest.Temp, opt => opt.Ignore())
.ForMember(dest => dest.Time, opt => opt.Ignore());
Mapper.CreateMap<CreateCardVm, SetNewCardSettings>()
// this gives me an error
.ForMember(dest => dest, opt => opt.MapFrom(src => Mapper.Map<AuditorVm, SetNewCardSettings>(src.Auditor)));
// I also tried this and it works, but it does not map my specific properties on SetNewCardSettings
//.ConvertUsing(dest => Mapper.Map<AuditorVm, SetNewCardSettings>(dest.Auditor));
UPDATE: 这里是小提琴https://dotnetfiddle.net/iccpE0
可您提供的类型,你会映射到从'CreateCardVm',这样你就不得不'Audit'映射到类型CardBase'的'属性的一个例子。 – 2014-12-05 14:21:28
哦,对不起,我复制了上次映射时出现了错误的类。最后一个映射是从'CreateCardVm'(具有'AuditVm')到'SetNewCardSettings'(具有'CardBase') – 2014-12-05 14:34:32
如果'CreateCardVM'没有从'AuditorVM'继承,最后一行(使用'ConvertUsing'的行) '? – 2014-12-05 14:40:25