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



我想将 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 就没有什么意义了。

相关内容

  • 没有找到相关文章

最新更新