2009-11-24 41 views
21

tengo un modelo sencillo como éste:C# AutoMapper colecciones anidadas

public class Order{ 
    public int Id { get; set; } 
    ... ... 
    public IList<OrderLine> OrderLines { get; set; } 
} 

public class OrderLine{ 
    public int Id { get; set; } 
    public Order ParentOrder { get; set; } 
    ... ... 
} 

Lo que hago con AutoMapper es la siguiente:

Mapper.CreateMap<Order, OrderDto>(); 
    Mapper.CreateMap<OrderLine, OrderLineDto>(); 
    Mapper.AssertConfigurationIsValid(); 

Es una excepción que dice: "Los OrderLineDtos propiedad en OrderDto no está asignado, agregue un mapeo personalizado ... " Como usamos una sintaxis personalizada en nuestro Dominio y en nuestro DomainDto, ¿cómo puedo especificar que la colección OrderLineDtos en OrderDto corresponde a OrderLines en orden?

Gracias

+1

¿Ha intentado colocar OrderLine CreateMap antes de la asignación de pedidos? – Lazarus

+0

No, déjame probar esto – Raffaeu

+1

¿Puedes publicar cómo se ve tu Dto? ¿Y un ejemplo de la sintaxis personalizada que usa? Necesitaríamos eso para proporcionarle un ejemplo de un mapeo personalizado. – jamesaharvey

Respuesta

21

Funciona de esta manera:

Mapper.CreateMap<Order, OrderDto>() 
     .ForMember(dest => dest.OrderLineDtos, opt => opt.MapFrom(src => src.OrderLines)); 
    Mapper.CreateMap<OrderLine, OrderLineDto>() 
     .ForMember(dest => dest.ParentOrderDto, opt => opt.MapFrom(src => src.ParentOrder)); 
    Mapper.AssertConfigurationIsValid(); 
+6

¿Sabía que puede editar su publicación original, independientemente de su reputación? Siempre es bueno mantener las actualizaciones de información en la pregunta original. –

8

colecciones anidadas funcionan, siempre que los nombres coinciden. En sus DTO, tiene el nombre de su colección como "OrderLineDtos", pero en el objeto Order, solo se trata de "OrderLines". Si elimina la parte "Dtos" de los nombres de propiedad OrderLineDtos y ParentOrderDto, debería coincidir.

+1

Entonces, ¿eso significa que el mapeo de colecciones anidadas de diferentes tipos de clases no funciona actualmente? A veces, el objeto anidado es un ViewModel y tiene propiedades que deben correlacionarse de forma diferente. ¡Gracias! – Abe

+0

¿Utilizará el mismo tipo concreto de ICollection/IList como se define en TDestination? – Monstieur

+0

@Jimmy Bogard: hay muchas veces que el objeto anidado es un DTO o un ViewModel. – Kamran

Cuestiones relacionadas