2009-11-24 47 views
21

Tôi có một mô hình đơn giản như thế này:C# automapper bộ sưu tập lồng nhau

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

Nó ném một ngoại lệ mà nói:: "The OrderLineDtos tài sản

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; } 
    ... ... 
} 

Những gì tôi làm với Automapper đây là trong OrderDto không được ánh xạ, thêm ánh xạ tùy chỉnh ... " Khi chúng tôi sử dụng cú pháp tùy chỉnh trong Miền của chúng tôi và trong DomainDto của chúng tôi, làm cách nào tôi có thể chỉ định rằng bộ sưu tập OrderLineDtos trong OrderDto tương ứng với OrderLines theo thứ tự?

Cảm ơn bạn

+1

Bạn đã thử đặt OrderLine CreateMap trước bản đồ Order chưa? – Lazarus

+0

Không để tôi thử điều này – Raffaeu

+1

Bạn có thể đăng những gì Dto của bạn trông như thế nào? Và một ví dụ về cú pháp tùy chỉnh bạn sử dụng? Chúng tôi sẽ cần điều đó để cung cấp cho bạn một ví dụ về ánh xạ tùy chỉnh. – jamesaharvey

Trả lời

21

Nó hoạt động theo cách này:

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

Bạn có biết rằng bạn có thể chỉnh sửa bài đăng gốc của mình, bất kể danh tiếng của bạn không? Nó luôn luôn tốt để giữ bất kỳ thông tin cập nhật trong câu hỏi ban đầu. –

8

bộ sưu tập lồng nhau làm việc, miễn là những cái tên phù hợp. Trong DTO của bạn, bạn có tên của bộ sưu tập của bạn là "OrderLineDtos", nhưng trong đối tượng Order, nó chỉ là "OrderLines". Nếu bạn loại bỏ phần "Dtos" của các tên thuộc tính OrderLineDtos và ParentOrderDto, tất cả phải khớp với nhau.

+1

Vậy, điều đó có nghĩa là ánh xạ các bộ sưu tập lồng nhau của các loại lớp khác nhau hiện không hoạt động? Đôi khi đối tượng lồng nhau là một ViewModel và có các thuộc tính cần được ánh xạ khác nhau. cảm ơn! – Abe

+0

Nó có sử dụng cùng loại ICollection/IList cụ thể như được định nghĩa trong TDestination không? – Monstieur

+0

@Jimmy Bogard: Có nhiều lần đối tượng lồng nhau chính nó là một DTO hoặc ViewModel. – Kamran

Các vấn đề liên quan