2014-01-06 56 views
0

我遇到了automapper的問題。我不知道如何做到這一點,並一直在尋找和嘗試不同的解決方案。如果有人能幫助我,我將不勝感激。如何將自動映射器配置爲從兩個源對象映射到目標對象?

因此,這裏的問題,我有兩個源類型,如下圖所示:

public class User 
{ 
    public string Name {get; set;} 
    public int Id {get; set;} 
} 

public class Product 
{ 
    public int UserId {get; set;} 
    public int Id {get; set;} 
    public double Price{get; set;} 
} 

我想這兩個到userdata類型的目的地地圖:

public class UserData 
{ 
    public string UserName{get; set;} 
    public int UserId {get;set;} 
    public List<Product> PurchasedProducts {get; set;} 
} 

感謝

回答

0

我使用自定義值解析器得到了這個工作。但我不認爲這是最好的解決方案,因爲解析器直接依賴於存儲庫。反正這裏是我做過什麼:

Mapper.CreateMap<Product, Dtos.Product>(); 

Mapper.CreateMap<User, UserData>() 
    .ForMember(dest => dest.UserName, opt => opt.MapFrom(src => src.Name)) 
    .ForMember(dest => dest.UserId, opt => opt.MapFrom(src => src.Id)) 
    .ForMember(dest => dest.PurchasedProducts, opt => 
        opt.ResolveUsing<User_Products_Resolver>()); 

Mapper.AssertConfigurationIsValid(); 

而且我實現了自定義的解析器如下:

public class User_Products_Resolver : ValueResolver<User, List<Product>> 
{ 
    protected override List<Product> ResolveCore(User userObj) 
    {     
     var productRepo = new ProductRepository(); 
     var r = productRepo.Get(p => p.UserId == userObj.Id) 
       .ToList<Product>(); 

     return r; 
    } 
} 

同樣,我不知道這是否是這樣做的正確方法。如果有人知道更好的方法,請讓我知道。

謝謝