Моделирование и запрос продукта, атрибутов, отношений свойств с сгруппированными атрибутами - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь смоделировать отношение для Products, ProductsAttributes и ProductProperties для системы магазина.Но у меня такое ощущение, что я не на правильном пути для моделирования или запроса атрибутов, сгруппированных с его свойствами.

У меня есть следующие отношения

First: Attributes => Properties

Вы должны иметь возможность создавать множество различных атрибутов со ВСЕМИ возможными свойствами для этого атрибута в серверной части.Так что это не для конкретного продукта, и я сделал следующее, что работает.

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; }
}

Секунда: Product => определенный выбор атрибутов с выбором доступных свойств для продукта

Чтобы создать конкретный продукт, мне нужны атрибуты 0-n со свойствами 1-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)

С помощью следующего запроса Iполучить правильные атрибуты, но только в том виде, в каком они есть, с помощью таблицы ProductAttributeProperty-table строка за строкой.Мои попытки добавить 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);   

Буду очень признателен за любую помощь.

...