[英]Automapper multiple source to one destination
我一直在仔細閱讀AutoMapper文檔和相關問題,以嘗試找到針對此問題的推薦解決方案,但未能找到它。
假設我有一個類似以下的來源:
public class Person{
public string PersonId{get;set;}
public string FirstName {get;set;}
public string LastName{get;set;}
public List<Company> Companies {get;set;}
}
public class Company{
public string CompanyName {get;set;}
public string CompanyAddress {get;set;}
public List<UserRoles> UserRoles
}
public class UserRoles{
public string PersonId{get;set;}
public List<Roles> Roles {get;set;}
}
public class Roles{
public string RoleId{get;set;}
public string RoleDescription {get;set;}
}
我想將上述源對象映射到目標對象,如下所示:
public class Person{
public string PersonId{get;set;}
public string FirstName {get;set;}
public string LastName{get;set;}
public List<CompanyViewModel> CompanyViewModel {get;set;}
}
public class CompanyViewModel{
public string CompanyName {get;set;}
public string CompanyAddress {get;set;}
public List<RolesViewModel> RolesViewModel {get;set;}
}
public class RolesViewModel{
public string RoleId{get;set;}
public string RoleDescription {get;set;}
}
我試過下面的代碼一起映射:
CreateMap<Person, PersonViewModel>();
CreateMap<Company, CompanyViewModel>();
CreateMap<UserRoles, IEnumerable<CompanyViewModel>>()
.ConvertUsing<CompanyRolesMapping>(); // Not sure
CreateMap<Roles, RolesViewModel>();
父級人員數據能夠正確映射,而子級公司和角色級數據則不能。
我不確定如何進行第三部分(將該項目映射到集合中的項目)。
最干凈的方法是什么?
我使用了以下技術,效果很好。
public void IntializeUserCompanyRolesMapping()
{
CreateMap<Roles, RolesViewModel>();
CreateMap<ICollection<Roles >, CompanyViewModel>()
.ForMember(d => d.CompanyName , opt => opt.Ignore())
.ForMember(d => d.CompanyAddress , opt => opt.Ignore())
.ForMember(d => d.RolesViewModel, opt => opt.MapFrom(s => s));
CreateMap<UserRoles, CompanyViewModel>()
.ForMember(d => d.RolesViewModel , opt => opt.MapFrom(s => s.Roles ));
CreateMap<Person, Person>()
.ForMember(d => d.CompanyViewModel , opt => opt.MapFrom(s => MapCompanyToCompanyViewModel(s.Companies )));
}
我使用自定義方法遍歷公司列表,並將其添加到公司視圖模型列表中。
private Collection<CompanyViewModel> MapCompanyToCompanyViewModel(ICollection<Company> Companies )
{
var companyViewModels = new Collection<CompanyViewModel>();
foreach (var company in Companies)
{
foreach (var companyViewModel in company.UserRoles.Select(Mapper.Map<CompanyViewModel>))
{
companyViewModels.Add(companyViewModel);
}
}
return companyViewModels;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.