Делаю дерево категорий, каждая категория может быть родительской и иметь определенное место на текущем уровне, т.е. должна знать за кем она стоит.
Модель:
public class Category
{
public string Title { get; set; }
public int? TopCategoryId { get; set; }
public Category TopCategory { get; set; }
public int? ParentCategoryId { get; set; }
public Category ParentCategory { get; set; }
public ICollection<Category> ChildrenCategories { get; set; }
public ICollection<Product> Products { get; set; }
}
Конфигурация:
public class CategoryConfiguration : EntityTypeConfiguration<Category>
{
public CategoryConfiguration()
{
Property(p => p.Title).IsRequired();
HasOptional(p => p.ParentCategory)
.WithMany(p => p.ChildrenCategories)
.HasForeignKey(p => p.ParentCategoryId)
.WillCascadeOnDelete(true);
HasOptional(p => p.TopCategory)
.WithRequired()
.Map(p => p.MapKey("TopCategoryId"));
HasMany(p => p.Products)
.WithMany(с => с.Categories)
.Map(с =>
{
с.ToTable("CategoryProducts");
с.MapLeftKey("CategoryId");
с.MapRightKey("ProductId");
});
}
}
Проблема в этой части:
HasOptional(p => p.TopCategory)
.WithRequired()
.Map(p => p.MapKey("TopCategoryId"));
Пишет что поле TopCategoryId должно быть уникальным.
Если убрать данное поле из модели, таблицы создаются как и положено. Однако это поле понадобится в дальнейшем. Что нужно подправить в FluentApi чтобы TopCategoryId осталось в модели?
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости