Самостоятельные ссылки / отношения родитель-ребенок в Entity Framework - PullRequest
27 голосов
/ 31 марта 2012

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

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

1 Ответ

33 голосов
/ 31 марта 2012

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

public int? ParentId { get; set; }

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

...