2014-04-01 58 views
1

我想将Parent映射到ParentMapped,Child应该映射到ChildMapped,但是ChildMapped的源也是Parent,因为ChildMapped的SomeFlag Property应该由Parent的SomeFlag Property来源。 类是这样的:如何使用AutoMapper将单个属性映射到集合的每个元素的属性?

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实现吗?

回答

1

您可以定义一个动作映射后运行:

Mapper.CreateMap<Parent, ParentMapped>() 
    .AfterMap((m,d) => d.Children.ForEach(c => c.SomeFlag = m.SomeFlag)); 
+0

我看到OP不想修改任何内容,但是如果他这样做呢?修改了ChildMapped.SomeFlag后,如何将其写回数据库? –

0

一个办法是到父属性添加到儿童,然后做一个ForMember(X => x.SomeFlag,选择=> opt.MapsFrom(SRC => src.Parent.SomeFlag)。

另外,您也可以使用ConstructUsing方法父但仍然会有使用AutoMapper如果你那里去是小点

+0

感谢,这是一个可能的方式,但源类不能修改。添加到这个问题。 – thomaswr

相关问题