Entity Framework. Таблица с деревом категорий

339
23 июня 2017, 06:01

Делаю дерево категорий, каждая категория может быть родительской и иметь определенное место на текущем уровне, т.е. должна знать за кем она стоит.

Модель:

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 осталось в модели?

READ ALSO
Как получить часть документа в mongodb?

Как получить часть документа в mongodb?

По умолчанию выборка содержит все поля документа, но мне не нужны все поляНапример, имеется коллекция users вида:

307
Запретить изменения значения

Запретить изменения значения

Имею List<Class>, который раз в N минут обновляется путем десериализации JSON файла, у коллекции реализован INotifyPropertyChanged для грамотного привязывания...

309
Получить нужный текст из байтов

Получить нужный текст из байтов

Подскажите как получить нужный мне текст

258
Скачать файл с учетом авторизации C#

Скачать файл с учетом авторизации C#

ЗдравствуйтеЕсть страничка, с которой необходимо скачать файл, предварительно авторизовавшись

297