2014-01-06 78 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; 
    } 
} 

同样,我不知道这是否是这样做的正确方法。如果有人知道更好的方法,请让我知道。

谢谢