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

Я прочитал довольно много сообщений программистов, которые столкнулись с Невозможно определить допустимый порядок зависимых операций. Зависимости могут существовать из-за ограничений внешнего ключа, требований модели или сгенерированных хранилищем значений— исключение при использовании самоссылающихся отношений в 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 быть нулевым.

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

28
задан Slauma 31 March 2012 в 12:38
поделиться