У меня есть база данных SQLite, которая настроена таким образом, что при удалении человека удаление происходит каскадно. Это прекрасно работает, когда я вручную удаляю Person (все записи, которые ссылаются на PersonID, удаляются). Но когда я использую Entity Framework для удаления человека, я получаю сообщение об ошибке:
System.InvalidOperationException: The operation failed: The relationship could not be changed because one or more of the foreign-key properties is non-nullable. When a change is made to a relationship, the related foreign-key property is set to a null value. If the foreign-key does not support null values, a new relationship must be defined, the foreign-key property must be assigned another non-null value, or the unrelated object must be deleted.
Я не понимаю, почему это происходит. Мой триггер настроен на очистку всех связанных объектов перед удалением объекта, который ему было приказано удалить.
Когда я захожу в редактор моделей и проверяю свойства отношения, он не показывает никаких действий для свойства OnDelete. Почему это не установлено правильно, потянув его из БД? Если я изменю это значение на Cascade, все будет работать правильно, но я бы не стал полагаться на это ручное изменение, потому что, если я обновлю свою модель из БД, и она потеряет это.
Вот оживший SQL для моих таблиц.
CREATE TABLE [SomeTable]
(
[SomeTableID] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
[PersonID] INTEGER NOT NULL REFERENCES [Person](PersonID) ON DELETE CASCADE
)
CREATE TABLE [Person]
(
[PersonID] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT
)