Я искал решение и не могу найти хорошую информацию. Много документации EF очень устарело. Вот моя проблема.
Если я добавляю дочернего элемента к родителю через свойство навигации ParentID, все работает нормально.
Если я добавляю ребенка к родителю через список «Дети», и этот ребенок уже существует, я получаю следующее исключение:
DbUpdateException: невозможно определить
действительный заказ для зависимых
операции. Зависимости могут существовать из-за
к ограничениям внешнего ключа, модель
требования, или сгенерированный магазином
значения.
Если я добавляю ребенка к родителю через список «Дети», и ребенок является новым (его также необходимо сохранить), я получаю следующее исключение:
DbUpdateConcurrencyException: магазин
обновить, вставить или удалить оператор
повлияло на неожиданное количество строк
(0). Объекты могут быть изменены
или удален, так как объекты были загружены.
Обновите записи ObjectStateManager.
Node.cs
public class Node
{
public long ID { get; private set; }
public long? ParentID { get; set; }
public List<Node> Children { get; set; }
}
Соответствующий DbContext.cs
protected override void OnModelCreating(DbModelBuilder mb)
{
mb.Entity<Node>()
.HasMany(c => c.Children)
.WithOptional()
.HasForeignKey(c => c.ParentID);
}