使用分组的属性对产品,属性,属性关系进行建模和查询

时间:2019-04-11 17:44:35

标签: c# .net-core entity-framework-core

我正在尝试为商店系统的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);   

我将非常感谢您的帮助。

0 个答案:

没有答案