简体   繁体   中英

AutoMapper for nested item collection

I have models below:

public class Order
{
    public long OrderId { get; set; }

    public ICollection<Order_OrderItem> Order_OrderItems { get; set; }
}

public class Order_OrderItem
{
    public long OrderId { get; set; }

    public virtual Order Order { get; set; }

    public int OrderItemId { get; set; }

    public virtual OrderItem OrderItem { get; set; }
}

And I create DTO below:

public class OrderDto
{
    public long OrderId { get; set; }

    public IEnumerable<OrderItemDto> OrderItems { get; set; }
}

How could I map Order to OrderDto ?

I got error with below:

configuration.CreateMap<Order, OrderDto>()
    .ForMember(desc => desc.OrderItems,
        opt => opt.MapFrom(src => src.Order_OrderItems));

I checked other related issues, and suggestions are related with map property from one to another, but my OrderItems is a collection property. How could I map it?

Any help would be appreciated.

Update

Change configuration like below:

configuration.CreateMap<Order_OrderItem, OrderItemDto>();
configuration.CreateMap<Order, OrderDto>()
    .ForMember(desc => desc.OrderItems,
        opt => opt.MapFrom(src => src.Order_OrderItems));

The OrderItems in OrderDto will be null when checking the result:

var result = ObjectMapper.Map<OrderDto>(order);

Map from OrderItem to OrderItemDto :

configuration.CreateMap<OrderItem, OrderItemDto>();

Map from Order to OrderDto :

configuration.CreateMap<Order, OrderDto>()
    .ForMember(dest => dest.OrderItems,
        opt => opt.MapFrom(src => src.Order_OrderItems.Select(o => o.OrderItem)));

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM