Problème de suppression en cascade avec Entity Framework et System.Data.SQLite

.net entity-framework sqlite sqlite3

Question

J'ai une base de données SQLite qui est configurée pour que lorsque je supprime une personne, la suppression soit en cascade. Cela fonctionne correctement lorsque je supprime manuellement une personne (tous les enregistrements qui référencent l’ID de personne sont supprimés). Mais lorsque j'utilise Entity Framework pour supprimer la personne, un message d'erreur s'affiche:

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.

Je ne comprends pas pourquoi cela se produit. Mon déclencheur est configuré pour nettoyer tous les objets liés avant de supprimer l'objet qu'il lui était demandé de supprimer.

Lorsque je vais dans l'éditeur de modèle et que je vérifie les propriétés de la relation, cela ne montre aucune action pour la propriété OnDelete. Pourquoi est-ce que ceci n'est pas réglé correctement en le tirant de la base de données? Si je modifie cette valeur en cascade, tout fonctionnera correctement, mais je préférerais ne pas compter sur ce changement manuel, car si j'actualise mon modèle à partir de la base de données et qu'il le perd.

Voici le SQL relivent pour mes tables.

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
)

Réponse acceptée

Je viens de traiter de cette question exacte. Il s’est avéré que lorsque j’utilisais EF pour mettre à Update model from database... , il n’obtenait pas correctement la règle "Cascade" pour la suppression.

Essayez d'accéder à votre modèle de base de données EF, cliquez sur l'association à l'origine du problème, puis assurez-vous que la End1 OnDelete (pouvant être End2, dépend du schéma de la base de données) est définie sur Cascade .


Réponse populaire

J'avais le même problème avec SQL Server. Lorsque j'ai essayé de mettre à jour le mode depuis la base de données, les règles de cascade n'ont pas été capturées. Notez que les règles ont été ajoutées après la création du modèle. J'ai même essayé de supprimer une table du modèle et de la rajouter. Cela a eu le même effet: pas de règles de cascade.

Cependant, lorsque j'ai créé un tout nouveau modèle avec les mêmes tables, il a repris les règles en cascade. Ma solution consistait donc simplement à supprimer l'ancien modèle et à en créer un nouveau portant le même nom, etc.

Je suppose que quelque chose ne va pas avec le modèle de mise à jour du processus de base de données.



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow