如何使用自动映射程序将单个属性映射到集合的每个元素的属性

本文关键字:属性 何使用 集合 元素 映射 映射程序 单个 | 更新日期: 2023-09-27 17:56:11

我想将 Parent 映射到 ParentMaped,并且 Child 应该映射到 ChildMapped,但 ChildMap 的源也是 Parent,因为 ChildMap 的 SomeFlag 属性应该由 Parent 的 SomeFlag 属性提供。类如下所示:

    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);

但是这个解决方案不起作用

使用自动映射器甚至可以进行这种映射吗?

如何使用自动映射程序将单个属性映射到集合的每个元素的属性

您可以定义要在映射后运行的操作:

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

一种方法是将 Parent 属性添加到 Child 中,然后执行 ForMember(x => x.SomeFlag,opt => opt。MapsFrom(src => src.Parent.SomeFlag)。

或者,您可以为父级使用 ConstructUsing 方法,但如果这样做,使用 AutoMapper 就没有什么意义了。