我正在尝试为商店系统的Products,ProductsAttributes和ProductProperty建立关系模型。但是,我感觉自己在正确的模型或查询与其属性分组的Attributes上不正确。
我有以下关系
第一:属性=>属性
您应该能够在后端使用此属性的所有可能属性创建许多不同的属性。因此,这与产品无关,我做了以下工作。
public class StockAttribute
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public ICollection<StockProperty> StockProperties { get; set; }
}
public class StockProperty
{
public int Id { get; set; }
public string Name { get; set; }
public int Quantity { get; set; }
public decimal PriceDiff { get; set; }
public int StockAttributeId { get; set; }
}
第二:产品=>特定的属性选择以及产品的可用属性
要创建具体的产品,我需要具有1-n个属性的0-n个属性。所以我创建了下表:
public class ProductAttributeProperty
{
public int ProductId { get; set; }
public Product Product { get; set; }
public int StockAttributeId { get; set; }
public StockAttribute StockAttribute { get; set; }
public int StockPropertyId { get; set; }
public StockProperty StockProperty { get; set; }
}
示例表:
ProductId | StockAttributeId | StockPropertyId
1 | 6 (color) | 12 (green)
1 | 6 (color) | 14 (blue)
1 | 7 (size) | 16 (M)
1 | 7 (size) | 17 (L)
这可行,但现在查询产品时出现问题。
我想要实现的是用分组的属性查询产品,以便我可以通过两个foreach循环遍历所有属性和属性,以显示具有特定项目的SELECT列表。
Product (1)
|
+ Attribute_1 (color)
+---------- Property_1 (green)
+---------- Property_2 (blue)
+ Attribute_2 (size)
+---------- Property_1 (M)
+---------- Property_2 (L)
通过以下查询,我可以获取正确的属性,但只能通过ProductAttributeProperty表逐行获取。到目前为止,我尝试添加GroupBy(属性)的尝试失败。
var product = await _context.Shop_Products
.Include(x => x.Attributes)
.ThenInclude(sa => sa.StockAttribute)
.Include(x => x.Attributes)
.ThenInclude(sp => sp.StockProperty)
.FirstOrDefaultAsync(x => x.Id == id);
我将非常感谢您的帮助。