如何使用AutoMapper将单个属性映射到集合的每个元素的属性?

时间:2014-04-01 15:25:40

标签: c# automapper

我想将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甚至可以实现这种映射吗?

2 个答案:

答案 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几乎没有意义。