Подтвердить что ты не робот

Взаимосвязанные отношения/отношения родитель-ребенок в Entity Framework

Я прочитал довольно много сообщений программистов, которые попадают в Невозможно определить действительное упорядочение для зависимых операций. Зависимости могут существовать из-за ограничений внешнего ключа, требований к модели или сохраненных в магазине значений -exception при использовании отношений саморегуляции в Entity Framework.

Я пытаюсь заставить отношения родитель-ребенок работать:

public class Category {
    public int CategoryId { get; set; }
    public string Name { get; set; }
    public int ParentId { get; set; }
    public Category Parent { get; set; }
    public List<Category> Children { get; set; }
}

Это конфигурация, которую я использую (Fluent API):

Property(c => c.ParentId).IsOptional();
HasMany(c => c.Children).WithOptional(c => c.Parent).HasForeignKey(c => c.ParentId);
//HasOptional(c => c.Parent).WithMany(c => c.Children).HasForeignKey(c => c.ParentId);

И конфигурации HasMany() и HasOptional() приводят к исключению "Невозможно определить правильное упорядочение для зависимых операций...", когда я пытаюсь сохранить новую категорию следующим образом:

context.Categories.Add(new Category { Name = "test" });

Я не понимаю, почему EF не вставляет Категория с нулевым parentId. База данных позволяет внешнему ключу ParentId быть нулевым.

Вы могли бы рассказать мне, как это сделать?

4b9b3361

Ответ 1

Вы должны определить ParentId в классе категории как nullable, чтобы использовать его как свойство внешнего ключа для необязательного отношения:

public int? ParentId { get; set; }

Свойство int не может принимать значение null и поэтому не может представлять значение null как в столбце базы данных.