对于具有相同Source类型但不同目标类型的地图,我可以在AutoMapper(v2.2)中使用继承映射吗?AutoMapper - 继承映射不工作,相同源,多个目标
我有这个基本情况(真正的类有很多属性):
public abstract class BaseViewModel
{
public int CommonProperty { get; set;}
}
public class ViewModelA : BaseViewModel
{
public int PropertyA { get; set; }
}
public class ViewModelB : BaseViewModel
{
public int PropertyB { get; set; }
}
ViewModelA
和ViewModelB
是相同的实体类的不同的表示:
public class Entity
{
public int Property1 { get; set; }
public int Property2 { get; set; }
public int Property3 { get; set; }
}
我想重用对于每个ViewModel,BaseViewModel
的相同映射,例如:
Mapper.CreateMap<Entity, BaseViewModel>()
.Include<Entity, ViewModelA>()
.Include<Entity, ViewModelB>()
.ForMember(x => x.CommonProperty, y => y.MapFrom(z => z.Property1));
Mapper.CreateMap<Entity, ViewModelA>()
.ForMember(x => x.PropertyA, y => y.MapFrom(z => z.Property2));
Mapper.CreateMap<Entity, ViewModelB>()
.ForMember(x => x.PropertyB, y => y.MapFrom(z => z.Property3));
但不幸的是,这似乎并不奏效。电话这样的:
var model = Mapper.Map<Entity, ViewModelA>(entity);
结果model
已经PropertyA
映射,但不CommonProperty
。我相信我正确地遵循https://github.com/AutoMapper/AutoMapper/wiki/Mapping-inheritance中的示例,但是恐怕有多个使用相同Source类型创建的地图会使AutoMapper跳动。
任何见解?我喜欢将Base类映射组合在一起的想法,但这似乎不起作用。
对于这个问题的未来读者 - 看起来AutoMapper已经解决了这个问题,因为问题被问到。 –
我想在这里做同样的事情,但我试图做: 'var model = Mapper.Map(entity)' 但它返回ViewModelA的一个实例,而不是BaseViewModel的实例,甚至认为我告诉Map函数返回一个BaseViewModel类型。我使用的是Automapper 3.0,所以似乎来自2.2的原始错误已得到解决。 –
njkremer
此SO贴子帮助我解决了我的问题,并获得了预期的效果。 http://stackoverflow.com/questions/27317719/automapper-how-to-not-repeat-mapping-config-from-complex-type-to-base-class – njkremer