如何配置automapper从两个源对象映射到目标对象?

时间:2014-01-06 22:27:15

标签: collections automapper complextype

我遇到了自动播放器的问题。我不知道如何做到这一点,并一直在寻找和尝试不同的解决方案。如果有人可以帮助我,我将不胜感激。

所以这是问题,我有两种源类型,如下所示:

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

由于

1 个答案:

答案 0 :(得分: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;
    }
}

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

感谢