Collections 如何将automapper配置为从两个源对象映射到目标对象?
我和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
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;
}
}
同样,我不确定这是否是正确的方法。如果有人知道更好的方法,请告诉我
谢谢