Tengo una base de datos SQLite que está configurada para que cuando elimine una persona, la eliminación se realice en cascada. Esto funciona bien cuando elimino manualmente una Persona (se borran todos los registros que hacen referencia a PersonID). Pero cuando se utiliza Entity Framework para borrar la persona consigo un error:Problema con la eliminación en cascada utilizando Entity Framework y System.Data.SQLite
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.
No entiendo por qué esto está ocurriendo. Mi desencadenador está configurado para limpiar todos los objetos relacionados antes de eliminar el objeto que se le dijo que elimine.
Cuando voy al editor de modelos y compruebo las propiedades de la relación, no muestra ninguna acción para la propiedad OnDelete. ¿Por qué no está configurado correctamente sacándolo del DB? Si cambio este valor a Cascade, todo funciona correctamente, pero prefiero no confiar en este cambio manual, porque si lo hago, renuevo mi modelo desde el DB y lo pierde.
Aquí está el SQL revivido para mis tablas.
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
)
¿Hay alguna manera de averiguar si debe actualizar End1 o End2? ¿O solo es prueba y error? –
Depende de la forma en que se modele su base de datos.Si tiene una relación de uno a varios, el extremo 'uno' debe establecerse en 'Cascade' – Omar