Как работает WillCascadeOnDelete в Entity Framework?

Как я понимаю, если я удалю родительскую строку, ее дети должны быть удалены, если я включу каскад при удалении. Однако, по моему тестированию, он, похоже, не работает вообще. Независимо от того, устанавливаю ли WillCascaseOnDelete значение true или false, он просто устанавливает внешний ключ своих дочерних элементов в значение null. Это вызывает еще одну проблему, которую я должен установить для внешнего ключа с нулевым значением, иначе SaveChange будет генерировать исключение. Это дефект или желаемое поведение?

Ответы

Ответ 1

Это связано с тем, что ваши внешние ключи (дочерние элементы) имеют значение NULL. По умолчанию при удалении родителя, если внешний ключ отношения равен NULL, EF удаляет родительский элемент и устанавливает для него внешний ключ. Если внешний ключ NOT NULL, он удалит ребенка (поведение, которое вы ищете?).

Вы можете изменить это поведение по умолчанию здесь

Ответ 2

Убедитесь, что в окне "Внешние отношения с ключами" в SQL Server вы выбрали Cascade как правило удаления.