Хочу создать каталог товаров. На каждом узле могут быть каталоги или товары.
Я решил использовать шаблон составного дизайна.
Я буду загружать узел с детьми, используя CTE. К сожалению, возникла проблема, поскольку EF Core не добавляет parentId в таблицу CategoryProducts. Кроме того, класс (Category as my Composite) имеет свой собственный класс CategoryDetails, а (Product as my Leaf) - свой собственный класс ProductDetails.
Как настроить EF Core для рекурсивного получения узлов из дерева? CTE - хорошая идея?
public enum CategoryProductType
{
Category,
Product
}
public abstract class CategoryProduct
{
public Guid Id { get; private set; }
public string Name { get; private set; }
public CategoryProductType Type { get; private set; }
protected CategoryProduct(Guid id, string name, CategoryProductType type)
{
Id = id;
Name = name;
Type = type;
}
}
public class Category : CategoryProduct
{
public string Code { get; private set; }
public CategoryDetails CategoryDetails { get; private set; }
private ICollection<CategoryProduct> _children { get; set; } = new Collection<CategoryProduct>();
public IEnumerable<CategoryProduct> Children => _children;
public Category(Guid id, string name, string code)
: base(id, name, CategoryProductType.Category)
{
Code = code;
}
}
public class CategoryDetails
{
public Guid CategoryId { get; private set; }
public Category Category { get; private set; }
public string Description { get; private set; }
private CategoryDetails() { }
public CategoryDetails(Category category, string description)
{
Category = category);
Description = description);
}
}
public class Product : CategoryProduct
{
public string Index { get; private set; }
public ProductDetails ProductDetails { get; private set; }
public Product(Guid id, string name, string index)
: base(id, name, CategoryProductType.Product)
{
SetIndex(index);
}
}
EF Core Настройка: ![enter image description here](https://i.stack.imgur.com/oRKqE.png)