2013-05-14 74 views
2

我有兩個類:Map List <>與Automapper?

public class CustomerDTO 
{ 

public string Name {get;set;} 
public List<Order> Orders {get;set;} 

} 

public class OrderDTO 
{ 
public string Name {get;set;} 
public string Description {get;set;} 
public decimal Cost{get;set;} 
} 

我使用AutoMapper對.NET 3.5,目前在做我的Application_StartUp如下:

Mapper.CreateMap<Customer, CustomerDTO>(); 
Mapper.CreateMap<Order,OrderDTO>(); 

這是一個簡單的例子,我叫我的DTO性質不同比我的實體屬性,所以我用ForMember,但我不清楚如何映射訂單到客戶:

我試過:

Mapper.CreateMap<Customer, CustomerDTO() 
.ForMember(dest => dest.Orders, opt=> opt.MapFrom(src=>src.Orders)); 

但它沒有找到src.Orders

如果確實需要同時有CreateMap報表,AutoMapper是否會自動鏈接對象CustomerOrders

+0

在您發佈的代碼中,CustomerDTO具有「訂單」而非「訂單」屬性。這只是發佈中的一個錯字嗎?如果發佈的內容比這個問題更爲嚴重,則屬性名稱區分大小寫。 – pstrjds 2013-05-14 16:31:46

+1

此外,如果你的地圖是1比1,那麼你可以只做'Mapper.Map(cust,custDTO)' – 2013-05-14 16:33:16

+0

不應該代碼也是'ListMOrdersDTO> Orders {get; set};'?? – MethodMan 2013-05-14 16:35:11

回答

0

是的,你需要告訴AutoMapper每個映射。它不會爲你猜測。因此,如果OrderDTO應映射到Order,則必須告訴AutoMapper。如果需要,您還必須指定反向關係(即Order應映射到OrderDTO)。

換句話說,雙向映射,你將需要:

Mapper.CreateMap<Order, OrderDTO>(); 
Mapper.CreateMap<OrderDTO, Order>(); 

至於Customer去,如果兩個CustomerCustomerDTO有一個名爲Orders屬性,你不需要做任何事情。只要您告訴AutoMapper在OrderOrderDTOCustomerCustomerDTO之間映射,當您映射Customer時,它會自動映射您的Order

+1

你可以使用.ReverseMap(),@Chris Pratt – 2013-05-15 06:42:42

+2

尼斯。我其實並不知道'ReverseMap'。 AutoMapper是偉大的,但文件離開*很*是理想的。不過,請記住'ReverseMap'只適用於上面的簡單映射。如果你需要使用'MapFrom'等來做自定義的東西,那麼你必須分解每個方向。 – 2013-05-16 14:59:34

相關問題