2015-12-28 1 views
1

J'essaie de créer un mappage entre une entité LLBLGen et un DTO à l'aide d'AutoMapper.Mapper l'entité LLBLGen à DTO

regards Mon DTO comme suit:

// Parent 
public int Id { get; set; } 
public List<Child> Children{ get; set; } // One to Many 

// Child 
public int Id { get; set; } 
public int Parent { get; set; } // Foreign key to parent Id 

Le ParentEntity contient un ChildCollection avec le même nom que la liste DTO et un identifiant (avec d'autres domaines de LLBL qui doivent être ignorés). Ainsi, lorsque ParentEntity est mappé sur le DTO parent, il doit également mapper ChildCollection à une liste d'enfants.

C'est ce que je suis arrivé à ce jour:

ParentEntity parentEntity = new ParentEntity(id); 

AutoMapper.Mapper.CreateMap<ParentEntity, Parent>(); 
AutoMapper.Mapper.CreateMap<ChildCollection, List<Child>>(); 

var parent = AutoMapper.Mapper.Map<Parent>(parentEntity); 

Il en résulte l'ID se cartographiés mais la liste a compter 0.

Comment puis-je le faire fonctionner?


MISE À JOUR:

Essayé la même chose que ma précédente tentative, mais la cartographie manuellement la liste des enfants entraîne également le même problème: Id se cartographié, mais la liste est vide.

Mapper.CreateMap<ParentEntity, Parent>() 
    .ForMember(dto => dto.Children, opt => opt.MapFrom(m => m.Children)); 
+0

S'il vous plaît montrer la classe 'ChildCollection'. Quel est le type de sa propriété 'List'? Je pense qu'il est préférable de fournir le code source pertinent complet de vos entités et DTO pour résoudre pourquoi le mappage ne fonctionne pas. –

+0

Les DTO sont déjà montrés dans ma question. ChildCollection contient ChildEntities qui contient les mêmes champs que le DTO et beaucoup plus de ressources LLBL. Coller toutes les ressources de ces collections/entités ne sera pas utile et trop. Si vous avez travaillé avec LLBL auparavant, vous devriez avoir une idée de ce que contiennent ces classes. – Sam

Répondre

2

Cette ligne n'est pas utile:

AutoMapper.Mapper.CreateMap<ChildCollection, List<Child>>(); 

Au lieu de cela, vous devez ajouter la classe à la classe carte explicite:

AutoMapper.Mapper.CreateMap<ChildEntity, Child>(); 

Et vous devez spécifier les propriétés exactes à la carte. Les deux propriétés doivent avoir le type Liste ou similaire (List<ChildEntity> comme source et List<Child> comme destination). Donc, si ParentEntity et Parent les classes ont toutes deux Children propriété, vous ne même pas à préciser:

.ForMember(dto => dto.Children, opt => opt.MapFrom(m => m.Children)); 

mapping par défaut assez:

Mapper.CreateMap<ParentEntity, Parent>(); 
+0

Vous l'avez trouvé! La solution était que le DTO ChildEntity et Child avait besoin d'une carte explicite de classe à classe. J'ai supposé que le problème était plus complexe et avait quelque chose à voir avec les types de liste n'étant pas similaires comme vous l'avez mentionné parce que LLBL a une implémentation de liste personnalisée (EntityCollections). Merci! – Sam