2017-06-22 2 views
1

Ich habe folgendes Modell:AutoMapper - unidirektionale Kommunikation von Objekten zur Liste

public class Foo 
{ 
    // some fields or properties 

    public Foo Parent { get; set; } 
} 

Was ich will, um zu sehen, nach:

public class Bar 
{ 
    public List<FooDTO> Foos { get; set; } 
} 

public class FooDTO 
{ 
    // some fields or properties 
} 

Ich möchte AutoMapper in der Lage sein zu verwenden, um die Parent zur Karte Eigenschaft des Foo-Typs zu einem generischen List<> (oder einem anderen IEnumerable-Typ) von FooDTO Eigenschaft.

Antwort

1

Es ist möglich, mit AfterMap und ResolutionMapper.Mapper.Map Anrufe:

var configuration = new MapperConfiguration(cfg => 
{ 
    cfg.CreateMap<Foo, FooDTO>(); 

    cfg.CreateMap<Foo, Bar>() 
     .AfterMap((src, dest, ctx) => 
     { 
      dest.Foos = new List<FooDTO>(); 

      var node = src.Parent; 

      while (node != null) 
      { 
       dest.Foos.Add(ctx.Mapper.Map<FooDTO>(node)); 

       node = node.Parent; 
      }; 
     }); 
}); 

var mapper = configuration.CreateMapper(); 
+0

Hm, danke, aber was, wenn Eltern auch Eltern? – Sigin

+1

@Sigin dann einen Zyklus verwenden. Antwort aktualisiert –

+0

das ist es, danke;) – Sigin

Verwandte Themen