从属性创建一个对象,并使用automapper添加到目标集合

时间:2017-06-27 15:59:13

标签: c# automapper

我很惊讶我还没有找到这个问题。

我有一个类似于以下的对象结构:

NumberDisplay

因此,想法是从Source实例中,automapper创建一个Child实例并将其添加到 Dest.Children 集合中。

我已经使用了以下方法:

public class Source
{
   public int SomeId {get;set;}
   public int NestedIdOne {get;set;}
   public int NestedIdTwo {get;set;}
}  

public class Dest
{
   public Dest()
   {
      this.Children = new List<Child>();
   }

   public int SomeId {get;set;}
   public IList<Child> Children {get;set}
}

public class Child 
{
   public int NestedIdOne {get;set;}
   public int NestedIdTwo {get;set;}
}

这很好但我想知道是否有更“自动”的方法。

我尝试过这样做:

CreateMap<Source, Dest>().ConstructUsing(MyMethod):

private Dest MyMethod(Source mySource)
{
   //... build Dest by hand.
}

但这不起作用。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

创建两个地图并从父级调用子地图:

var configuration = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<Source, Child>();

    cfg.CreateMap<Source, Dest>()
        .AfterMap((src, dest, ctx) =>
        {
            dest.Children = new List<Child>();

            dest.Children.Add(ctx.Mapper.Map<Child>(src));
        });
});

用法:

var mapper = configuration.CreateMapper();

Dest destination = mapper.Map<Source, Dest>(source);