2009-11-24 113 views
21

我有一個簡單的模型,像這樣的:C#automapper嵌套集合

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

我做Automapper是這樣的:

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

扔,說一個例外: 「屬性OrderLineDtos在OrderDto沒有映射,添加自定義映射......「 因爲我們在我們的域和我們的DomainDto中使用自定義語法,我如何指定OrderDto中的集合OrderLineDtos對應Order中的OrderLines?

謝謝

+1

您是否曾嘗試將OrderLine CreateMap放在Order映射之前? – Lazarus 2009-11-24 13:03:19

+0

不讓我試試這個 – Raffaeu 2009-11-24 13:11:10

+1

你可以發佈你的Dto的外觀嗎?以及您使用的自定義語法的示例?我們需要爲您提供自定義映射的示例。 – jamesaharvey 2009-11-24 13:12:00

回答

21

它的工作原理是這樣的:

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

您是否知道無論您的聲譽如何,您都可以編輯原始帖子?在原始問題中保留任何信息更新總是好的。 – 2009-12-01 05:10:05

8

嵌套集合工作,只要名稱匹配。在您的DTO中,您的集合名稱爲「OrderLineDtos」,但在Order對象中,它只是「OrderLines」。如果刪除OrderLineDtos和ParentOrderDto屬性名稱的「Dtos」部分,它應該全部匹配。

+1

那麼,這是否意味着映射不同類類型的嵌套集合目前無法正常工作?有時,嵌套對象是一個ViewModel,並且具有需要以不同方式映射的屬性。謝謝! – Abe 2010-12-10 18:32:40

+0

它是否會使用與TDestination中定義的相同的具體ICollection/IList類型? – Monstieur 2013-05-14 11:10:58

+0

@Jimmy Bogard:有很多次嵌套對象本身是一個DTO或ViewModel。 – Kamran 2014-03-17 13:46:01