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

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

2 ответов


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

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


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