Est-ce que la suppression d'un LINQ DB supprimer également des enregistrements dans d'autres tableaux qui ont une association clé étrangère?
-
18-09-2019 - |
Question
à la racine de mon DB, j'ai une table « Client ». Le client a des clés étrangères vont à environ 6-7 autres tables comme les reçus, adresses, documents, etc. Si je devais supprimer un client à l'aide SubmitChanges (), qui serait chercher tous ces documents avec l'association clé étrangère et les supprimer aussi, ou aurais-je besoin de faire comme 6 requêtes?
La solution
Cela ne se produira si vous avez configuré vos tables de base de données pour le faire avec cascade des suppressions (à savoir on delete cascade
).
Pour plus d'informations s'il vous plaît voir Insert, Update et Delete (LINQ to SQL) :
LINQ to SQL ne prend pas en charge ou reconnaître les opérations de suppression en cascade. Si vous souhaitez supprimer une ligne dans une table qui a des contraintes contre, vous doit soit mettre ON SUPPRIMER CASCADE la règle dans la contrainte de clé étrangère la base de données, ou utilisez votre propre code pour d'abord supprimer les objets enfants empêcher l'objet d'être parent supprimé. Dans le cas contraire, une exception est jeté.
Autres conseils
Quel genre d'action en cascade avez-vous sur les relations clés étrangères ??
Par défaut, la plupart des systèmes de base de données (y compris SQL Server, que je présume que vous utilisez) aura pas « ON SUPPRIMER CASCADE » ou toute autre action -. Donc, dans ce cas, rien ne se produirait
Cette requête T-SQL vous montrer vos relations clés étrangères et si oui ou non des actions ou UPDATE SUPPRIMER de référence ont été définis:
SELECT
name 'FK Constraint',
OBJECT_NAME(parent_object_id) 'Parent table',
OBJECT_NAME(referenced_object_id) 'Referenced table',
delete_referential_action ,
delete_referential_action_desc ,
update_referential_action ,
update_referential_action_desc
FROM
sys.foreign_keys
Si vous voulez quelque chose arrive, vous devez vous assurer que les relations FK sont paramétrés pour utiliser ces actions en cascade.
Voir la documentation MSDN sur Cascading référentielle Contraintes d'intégrité pour plus détails.