У меня есть таблица с самоналожением, где ParentId является FK для идентификатора (PK).
Используя EF (сначала код), я установил свои отношения следующим образом:
this.HasOptional(t => t.ParentValue)
.WithMany(t => t.ChildValues)
.HasForeignKey(t => t.ParentId);
Когда я пытаюсь удалить дочерние элементы и его родительские элементы, команды DELETE EF, вызываемые в базу данных, не находятся в том порядке, в котором я ожидал, что они уйдут - сначала он пытается удалить родительскую запись.
Я понимаю, что у меня есть пара вариантов (ни один из которых мне не нравится):
- Сначала удалите дочерние записи, сделайте полное сохранение/фиксацию, а затем удалите родительскую запись. Со сложностью моей модели и логикой, которая ее поддерживает, это не вариант - не могу выпускать несколько команд фиксации всякий раз, когда я хочу.
- Расторите отношения перед удалением чего-либо. Это похоже на более разумное решение, но опять же, я должен отправить отдельную фиксацию с помощью инструкции UPDATE перед DELETE. Я хочу избежать нескольких вызовов сохранения/фиксации.
- Используйте триггер для удаления детей до удаления родительской записи. Но я бы хотел как можно больше избежать триггеров и их проблемного характера.
Итак, вопрос в том, есть ли способ принудительно удалить детей перед родительской записью? Возможно, я пропустил какой-то явный способ сообщить EF, что он должен заботиться о этих детях перед родителем? Может быть, есть способ направить EF для удаления в порядке убывания ID? Я не знаю.. мысли?