使用AutoMapper,我可以覆盖属性的已解析类型吗?例如,给定这些类:
public class Parent
{
public Child Value { get; set; }
}
public class Child { ... }
public class DerivedChild : Child { ... }
我可以将AutoMapper配置为使用Child Value
实例自动化DerivedChild
属性吗?假设的映射看起来像这样:
map.CreateMap<ChildEntity, DerivedChild>();
map.CreateMap<ParentEntity, Parent>()
.ForMember(p => p.Value, p => p.UseDestinationType<DerivedChild>());
(我是projecting from LINQ entities。我能找到的最接近的是使用custom type converter,但看起来我需要覆盖整个映射。)
答案 0 :(得分:1)
这是一种方法:
map.CreateMap<ChildEntity, DerivedChild>();
map.CreateMap<ParentEntity, Parent>()
.ForMember(
x => x.Value,
opt => opt.ResolveUsing(
rr => map.Map<DerivedChild>(((ParentEntity)rr.Context.SourceValue).Value)));
ResolveUsing
允许指定用于映射值的自定义逻辑。
此处使用的自定义逻辑实际上是调用map.Map
来映射到DerivedChild
。
答案 1 :(得分:0)
您可以在映射后手动重新分配新对象:
Mapper.CreateMap<ParentEntity, Parent>()
.AfterMap((src, dest) => dest.Value = new DerivedChild(){...});
甚至重新映射它:
.AfterMap((src, dest) => dest.Value = Mapper.Map<DerivedChild>(dest.Value));