【发布时间】:2018-10-31 06:06:52
【问题描述】:
我正在用 c#、automapper 和 postgreSQL ef 核心做一个小例子。 我的实体是客户、产品、销售、销售产品。
我已经做了客户和产品的映射,但我不知道如何映射销售和产品之间的 n 到 n 关系。
这是我的代码:
销售实体:
public partial class Sales
{
public Sales()
{
SalesProducts = new HashSet<SalesProducts>();
}
public int SaleId { get; set; }
public int? ClientId { get; set; }
public float TotalPrice { get; set; }
public DateTime? Date { get; set; }
public Clients Client { get; set; }
public ICollection<SalesProducts> SalesProducts { get; set; }
}
产品实体:
public partial class Products
{
public Products()
{
SalesProducts = new HashSet<SalesProducts>();
}
public int ProductId { get; set; }
public string ProductName { get; set; }
public string Description { get; set; }
public float Price { get; set; }
public int Quant { get; set; }
public ICollection<SalesProducts> SalesProducts { get; set; }
}
SalesProducts 实体:
public partial class SalesProducts
{
public int ProductId { get; set; }
public int SaleId { get; set; }
public int? Quantity { get; set; }
public Products Product { get; set; }
public Sales Sale { get; set; }
}
产品型号:
public class Products
{
public int ProductId { get; set; }
public string ProductName { get; set; }
public string Description { get; set; }
public float Price { get; set; }
public int Quant { get; set; }
}
销售模式:
public class Sales
{
public int SaleId { get; set; }
public Clients Client { get; set; }
public float TotalPrice { get; set; }
public DateTime? Date { get; set; }
public List<Products> Product { get; set; }
}
销售产品型号:
public class SalesProducts
{
public int SaleId { get; set; }
public int ProductId { get; set; }
public int Quant { get; set; }
}
我尝试进行映射,但它总是给出关于未映射产品的错误:
public class SalesProfiles : Profile
{
public SalesProfiles()
{
CreateMap<DataModels.SalesProducts, Models.SalesProducts>();
CreateMap<DataModels.Sales, Models.SalesProducts>()
.ForMember(dest => dest.SaleId, opt => opt.MapFrom(src => src.SaleId))
.ReverseMap();
CreateMap<DataModels.Products, Models.SalesProducts>()
.ForMember(dest => dest.ProductId, opt => opt.MapFrom(src => src.ProductId))
.ReverseMap();
CreateMap<DataModels.Sales, Models.Sales>()
.ForMember(dest => dest.SaleId, opt => opt.MapFrom(src => src.SaleId))
.ForMember(dest => dest.Client, opt => opt.MapFrom(src => src.Client))
.ForMember(dest => dest.Date, opt => opt.MapFrom(src => src.Date))
.ForMember(dest => dest.TotalPrice, opt => opt.MapFrom(src => src.TotalPrice))
.ForMember(dest => dest.Product, opt => opt.MapFrom(src => src.SalesProducts.Select(x => x.Product).ToList()));
}
}
产品映射:
public class ProductsProfiles : Profile
{
public ProductsProfiles()
{
CreateMap<Models.Products, BindingModels.Products>()
.ForMember(dest => dest.ProductName, opt => opt.MapFrom(src => src.ProductName))
.ForMember(dest => dest.Description, opt => opt.MapFrom(src => src.Description))
.ForMember(dest => dest.Quant, opt => opt.MapFrom(src => src.Quant))
.ForMember(dest => dest.Price, opt => opt.MapFrom(src => src.Price))
.ReverseMap();
CreateMap<Models.Products, DataModels.Products>()
.ForMember(dest => dest.ProductId, opt => opt.MapFrom(src => src.ProductId))
.ForMember(dest => dest.ProductName, opt => opt.MapFrom(src => src.ProductName))
.ForMember(dest => dest.Description, opt => opt.MapFrom(src => src.Description))
.ForMember(dest => dest.Quant, opt => opt.MapFrom(src => src.Quant))
.ForMember(dest => dest.Price, opt => opt.MapFrom(src => src.Price))
.ReverseMap();
CreateMap<BindingModels.Products, DataModels.Products>()
.ForMember(dest => dest.ProductName, opt => opt.MapFrom(src => src.ProductName))
.ForMember(dest => dest.Description, opt => opt.MapFrom(src => src.Description))
.ForMember(dest => dest.Quant, opt => opt.MapFrom(src => src.Quant))
.ForMember(dest => dest.Price, opt => opt.MapFrom(src => src.Price))
.ReverseMap();
CreateMap<DataModels.Products, Models.Products>()
.ForMember(dest => dest.ProductId, opt => opt.MapFrom(src => src.ProductId))
.ForMember(dest => dest.ProductName, opt => opt.MapFrom(src => src.ProductName))
.ForMember(dest => dest.Description, opt => opt.MapFrom(src => src.Description))
.ForMember(dest => dest.Quant, opt => opt.MapFrom(src => src.Quant))
.ForMember(dest => dest.Price, opt => opt.MapFrom(src => src.Price))
.ReverseMap();
}
}
客户映射:
public class ClientsProfiles : Profile
{
public ClientsProfiles()
{
CreateMap<Models.Clients, BindingModels.Clients>()
.ForMember(dest => dest.FirstName, opt => opt.MapFrom(src => src.FirstName))
.ForMember(dest => dest.LastName, opt => opt.MapFrom(src => src.LastName))
.ForMember(dest => dest.BirthDate, opt => opt.MapFrom(src => src.BirthDate))
.ReverseMap();
CreateMap<Models.Clients, DataModels.Clients>()
.ForMember(dest => dest.ClientId, opt => opt.MapFrom(src => src.ClientId))
.ForMember(dest => dest.FirstName, opt => opt.MapFrom(src => src.FirstName))
.ForMember(dest => dest.LastName, opt => opt.MapFrom(src => src.LastName))
.ForMember(dest => dest.BirthDate, opt => opt.MapFrom(src => src.BirthDate))
.ReverseMap();
CreateMap<BindingModels.Clients, DataModels.Clients>()
.ForMember(dest => dest.FirstName, opt => opt.MapFrom(src => src.FirstName))
.ForMember(dest => dest.LastName, opt => opt.MapFrom(src => src.LastName))
.ForMember(dest => dest.BirthDate, opt => opt.MapFrom(src => src.BirthDate))
.ReverseMap();
CreateMap<DataModels.Clients, Models.Clients>()
.ForMember(dest => dest.ClientId, opt => opt.MapFrom(src => src.ClientId))
.ForMember(dest => dest.FirstName, opt => opt.MapFrom(src => src.FirstName))
.ForMember(dest => dest.LastName, opt => opt.MapFrom(src => src.LastName))
.ForMember(dest => dest.BirthDate, opt => opt.MapFrom(src => src.BirthDate))
.ReverseMap();
}
}
有人知道我该如何正确映射吗?
【问题讨论】:
标签: c# database postgresql automapper ef-core-2.0