Я пытаюсь смоделировать отношение для 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);
Буду очень признателен за любую помощь.