Asp.net core 使用AutoMapper展平多对多关系
我使用的是EF Core,两个表之间存在多对多关系Asp.net core 使用AutoMapper展平多对多关系,asp.net-core,entity-framework-core,automapper-9,Asp.net Core,Entity Framework Core,Automapper 9,我使用的是EF Core,两个表之间存在多对多关系 public class Sale { public int Id { get; set; } public DateTime Date { get; set; } public double Total { get; set; } public List<SalePaymentMethod> SalePaymentMethods { get; set; }
public class Sale
{
public int Id { get; set; }
public DateTime Date { get; set; }
public double Total { get; set; }
public List<SalePaymentMethod> SalePaymentMethods { get; set; }
}
关系的另一个表:
public class PaymentMethod
{
public int Id { get; set; }
public string PaymentName { get; set; }
public bool PaymentType { get; set; }
public List<SalePaymentMethod> SalePaymentMethods { get; set; }
}
我的问题可能是我想在主映射中做另一个映射。我找到了解决方法 创建一个配置文件,以将
SalePaymentMethod
从映射到PaymentMethodDto
public class PaymentMethodProfile : Profile
{
public PaymentMethodProfile()
{
CreateMap<SalePaymentMethod, PaymentMethodDto>()
.ForMember(q => q.Amount, opt => opt.MapFrom(s => s.Amount))
.ForMember(q => q.DefferedPaymentCount, opt => opt.MapFrom(s => s.DefferedPaymentCount))
.ForMember(q => q.PaymentName, opt => opt.MapFrom(s => s.PaymentMethod.PaymentName))
.ForMember(q => q.PaymentType, opt => opt.MapFrom(s => s.PaymentMethod.PaymentType));
}
}
}
然后像这样使用它:
_mapper.ProjectTo<SaleUserBranchProductsDTO>(_context.Sales.Where(wh => wh.UserId == UserId)).ToList();
\u mapper.ProjectTo(_context.Sales.Where(wh=>wh.UserId==UserId)).ToList();
是的,这是可能的。“你试过什么了吗?”我浪费了一整天的时间来想办法解决它。发布这个问题几分钟后,我设法解决了它。谢谢:)
public class PaymentMethodDto
{
public string PaymentName { get; set; }
public bool PaymentType { get; set; }
public int DefferedPaymentCount { get; set; }
public double Amount { get; set; }
}
public class PaymentMethodProfile : Profile
{
public PaymentMethodProfile()
{
CreateMap<SalePaymentMethod, PaymentMethodDto>()
.ForMember(q => q.Amount, opt => opt.MapFrom(s => s.Amount))
.ForMember(q => q.DefferedPaymentCount, opt => opt.MapFrom(s => s.DefferedPaymentCount))
.ForMember(q => q.PaymentName, opt => opt.MapFrom(s => s.PaymentMethod.PaymentName))
.ForMember(q => q.PaymentType, opt => opt.MapFrom(s => s.PaymentMethod.PaymentType));
}
}
public SaleUserBranchProductsProfile()
{
CreateMap<Sale, SaleUserBranchProductsDTO>()
.ForMember(q => q.Id, opt => opt.MapFrom(s => s.Id))
.ForMember(q => q.Date, opt => opt.MapFrom(s => s.Date))
.ForMember(q => q.Total, opt => opt.MapFrom(s => s.Total))
//Here is the magic
.ForMember(q=> q.PaymentMethoddtos, opt => opt.MapFrom(s => s.SalePaymentMethods));
}
_mapper.ProjectTo<SaleUserBranchProductsDTO>(_context.Sales.Where(wh => wh.UserId == UserId)).ToList();