Каскад Entity Framework удаляет родительскую строку в таблице, ссылающейся на себя

В моей базе данных 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)


person Korj    schedule 29.02.2012    source источник
comment
У меня точно такая же проблема. Кто-нибудь решил это?   -  person christof    schedule 06.02.2013
comment
Рекурсивным методом: перейдите по этой ссылке: stackoverflow.com/a/49222005/1817640   -  person Said Roohullah Allem    schedule 11.03.2018