Сначала не работает ассоциация ef-кода с самоссылкой «один ко многим»

#c# #sql #entity-framework #ef-code-first

#c# #sql #entity-framework #ef-code-first

Вопрос:

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

Это мой класс:

 public class Category:EntityBase
{
    public Guid? ParentCategoryId { get; set; }
    public virtual Category ParentCategory { get; set; }

    public virtual List<Category> ChildCategories { get; set; }

    public List<ProductBase> Products { get; set; }

    public string Name { get; set; }

    public int Position { get; set; }
}
  

Поскольку entitybase является абстрактным классом с идентификатором в качестве guid и некоторой другой информацией.

Мой modelbuilder выглядит следующим образом:

 builder.Entity<Category>()
                .HasOptional(i => i.ParentCategory)
                .WithMany(i => i.ChildCategories)
                .HasForeignKey(i => i.ParentCategoryId);
  

Это решение, которое я нашел в других сообщениях SO. но это создает только одну таблицу в моей базе данных, и она выглядит следующим образом:

введите описание изображения здесь

Комментарии:

1. Это кажется правильным. Чего бы вы ожидали?

2. какая-то ссылка на мой список продуктов, а также какая-то ссылка на дочерние категории

3. Ссылка на дочерние категории автономна в таблице категорий (вы должны увидеть fk для себя). У вас также должна быть категория продукта с полем «CategoryID» в качестве Fk для таблицы категорий

4. хорошо, я нашел категорию fk в моей таблице продуктов, но не ограничит ли это ее, чтобы один продукт мог быть только в одной категории

5. Да, верно. Но это вы объявили его общедоступным Guid? ParentCategoryID { get; set; } общедоступная виртуальная категория ParentCategory { get; set; }’. Вам следует использовать список, если вам нужно несколько родительских элементов.