В моей базе данных MS SQL Server 2008 у меня есть самоссылочная таблица с категориями для иерархии (ID и ParentID).У таблицы есть собственное ограничение внешнего ключа и триггер «Вместо удаления», чтобы выполнить удаление полного узла с его дочерними элементами.
Для управления данными я использую Entity Framework (4.3) с моделью, сгенерированной из БД ссамосопровождаемые объекты и ObjectContext
(генерируется шаблоном VS).У EDM также есть ассоциативные ссылки на объект «категория».
Я столкнулся с проблемой при попытке удалить родительскую строку, в которой есть хотя бы одна дочерняя строка.
После того, как я вызову:
Entity.MarkAsDeleted();
Context.SaveChanges();
В SQL Server Profiler я вижу, что EF сначала генерирует оператор обновления, чтобы установить ParentID дочерних строк на null, а затем удаляет родительскую строку!Конечно, каскадное правило в БД не работает, и дочерние узлы остаются как в контексте EF, так и в БД.
Я попытался установить правило ассоциации «При удалении» на «Каскад» и «Нет», но ононе имеет смысла ...
Как я могу выполнить каскадное удаление в самоссылающейся таблице с EF или, по крайней мере, как запретить EF обновлять родительские идентификаторы дочерних строк?
PS: здесь я обнаружил точно такую же проблему без ответа (MSDN)