我想将Parent映射到ParentMapped,Child应该映射到ChildMapped,但ChildMapped的源也是Parent,因为ChildMapped的SomeFlag属性应该由Parent的SomeFlag Property提供。 类看起来像这样:
public class Parent
{
public bool SomeFlag { get; set; }
public List<Child> Children { get; set; }
}
public class ParentMapped
{
public List<ChildMapped> Children { get; set; }
}
public class Child
{
}
public class ChildMapped
{
public bool SomeFlag { get; set; }
}
假设父类和子类的结构无法修改。我尝试配置这样的映射:
Mapper.CreateMap<Parent, ParentMapped>();
Mapper.CreateMap<Child, ChildMapped>();
Mapper.CreateMap<Parent,ChildMapped>()
.ForMember(dest => dest.SomeFlag, opt => opt.MapFrom(src => src));
并通过这样调用来进行映射:
var instanceOfParent = new Parent();
var intanceOfParentMapped = mapper.Map<ParentMapped>(instanceOfParent);
但是这个解决方案不起作用。
AutoMapper甚至可以实现这种映射吗?
答案 0 :(得分:2)
您可以定义在映射后运行的操作:
Mapper.CreateMap<Parent, ParentMapped>()
.AfterMap((m,d) => d.Children.ForEach(c => c.SomeFlag = m.SomeFlag));
答案 1 :(得分:0)
一种方法是将Parent属性添加到Child,然后执行ForMember(x =&gt; x.SomeFlag,opt =&gt; opt.MapsFrom(src =&gt; src.Parent.SomeFlag)。
或者,您可以为父级使用ConstructUsing方法,但如果您采用这种方式,使用AutoMapper几乎没有意义。