Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Collections 如何将automapper配置为从两个源对象映射到目标对象?_Collections_Automapper_Complextype - Fatal编程技术网

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

Collections 如何将automapper配置为从两个源对象映射到目标对象?,collections,automapper,complextype,Collections,Automapper,Complextype,我和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;} p

我和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;}
}
公共类用户数据
{
公共字符串用户名{get;set;}
public int UserId{get;set;}
公共列表PurchasedProducts{get;set;}
}

谢谢

我使用自定义值解析器实现了这一点。但我不认为这是最好的解决方案,因为解析器直接依赖于存储库。不管怎样,这就是我所做的:

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();
Mapper.CreateMap();
Mapper.CreateMap()
.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.resolvesusing());
assertConfigurationsValid();
我实现了自定义解析器,如下所示:

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;
    }
}
公共类用户\u产品\u解析器:ValueResolver
{
受保护的覆盖列表ResolveCore(用户userObj)
{                
var productRepo=new ProductRepository();
var r=productRepo.Get(p=>p.UserId==userObj.Id)
.ToList();
返回r;
}
}
同样,我不确定这是否是正确的方法。如果有人知道更好的方法,请告诉我

谢谢