2012-05-18 8 views
5

BEARBEITEN: Titel ist falsch, ich versuche, aus einer Quellenliste zu einem geschachtelten Modell der Quellliste zuordnen.AutoMapper-Zuordnung von Quelle verschachtelte Sammlung zu einer anderen Sammlung

Ich habe Probleme beim Zuordnen einer Liste zu einer anderen Liste in einem verschachtelten Modell. Art von und un-Abflachungen von Art. Das Problem ist, ich weiß nicht, wie man die Mappings macht.

Hier ist mein Set up an Mapping meiner gescheiterten Versuchen gefolgt:

public class DestinationModel 
{ 
    public DestinationNestedViewModel sestinationNestedViewModel { get; set; } 
} 

public class DestinationNestedViewModel 
{ 
    public List<ItemModel> NestedList { get; set; } 
} 

public class SourceModel 
{ 
    public List<Item> SourceList { get; set; } 
} 

Wo Artikel und ItemModel haben bereits eine Zuordnung zwischen ihnen

I

definiert ist, kann es auf diese Weise nicht ...

Mapper.CreateMap<SourceModel, DestinationModel>() 
.ForMember(d => d.DestinationNestedViewModel.NestedList, 
    opt => opt.MapFrom(src => src.SourceList)) 

ERROR:

Ausdruck ‚d => d.DestinationNestedViewMode l.NestedList‘auf der obersten Ebene member.Parameter Namen auflösen muss: Lambda

Ich habe dann versucht, so etwas wie dieses:

.ForMember(d => d.DestinationNestedViewModel, 
o => o.MapFrom(t => new DestinationNestedViewModel { NestedList = t.SourceList })) 

Das Problem dort NestedList = t.SourceList ist. Sie enthalten jeweils verschiedene Elemente, ItemModel und Element jeweils. Also müssen sie kartiert werden.

Wie kann ich dies abbilden?

+0

Ich bin nicht sicher, ob ich es richtig verstehen , aber ich denke, dass Sie ein Mapping von Item zu ItemModel erstellen müssen, damit AutoMapper Item-Objekte ItemModel-Objekten zuordnen kann. –

+0

Es ist bereits eine Zuordnung zwischen Item und ItemModel definiert, aber die Zuordnung wird nicht ausgelöst, da NestedList zu einem DestinationModel gehört, das wiederum zu DestinationNestedViewModel gehört. Automapper kann beim Mapping nicht zwei Ebenen von Modellen verwalten (zumindest nicht so, wie ich es probiert habe) – getit

Antwort

11

Ich glaube, Sie so etwas wie dies will:

Mapper.CreateMap<Item, ItemModel>(); 

/* Create a mapping from Source to Destination, but map the nested property from 
    the source itself */ 
Mapper.CreateMap<SourceModel, DestinationModel>() 
    .ForMember(dest => dest.DestinationNestedViewModel, opt => opt.MapFrom(src => src)); 

/* Then also create a mapping from Source to DestinationNestedViewModel: */ 
Mapper.CreateMap<SourceModel, DestinationNestedViewModel>() 
    .ForMember(dest => dest.NestedList, opt => opt.MapFrom(src => src.SourceList)); 

Dann alles, was Sie tun sollen, müssen, ist Aufruf Mapper.Map zwischen Source und Destination:

Mapper.Map<SourceModel, DestinationModel>(source); 
+0

zuerst die Sammlungen beider Objekte abbilden und dann die Zuordnungen für die einzelnen Objekte in diesen Sammlungen definieren. Automapper ist so cool – hanzolo