2010-08-04 2 views
3

J'ai deux objets (classe, étudiant) dans une base de données avec une relation plusieurs à plusieurs (en utilisant une simple table de jonction). J'ai trouvé comment ajouter correctement de nouveaux objets aux tables, et maintenant je voudrais supprimer un objet.Supprimer un objet avec une relation plusieurs à plusieurs de la structure d'entités?

J'ai essayé ce qui suit:

// (a classobj with id==1 does exist) 
ClassObj cl = (from c in entities.ClassObjs where c.ClassID == 1 select c).First(); 
entities.ClassObjs.DeleteObject(cl); 
entities.SaveChanges(); 

Ce qui donne l'erreur:

"The DELETE statement conflicted with the REFERENCE constraint \"FK_JunctionClassObjsStudents_Students\". 

Où JunctionClassObjsStudents est le nom de la table de jonction qui crée la relation plusieurs à plusieurs entre les classes et tables d'étudiants.

Que dois-je faire? Merci de votre aide!!

Répondre

2

Une solution consiste à mettre une cascade (ou SET NULL) sur la FK et régénérer votre modèle d'entité.

+0

Merci pour votre réponse! J'ai entendu parler de la cascade delete (en supposant que c'est ce que vous voulez dire?), Mais je crois comprendre que supprimer tous les objets liés à celui supprimé, même si ceux-ci étaient liés à d'autres. Fondamentalement, dans cet exemple, si vous supprimez une classe, supprime-t-elle les étudiants associés à cette classe, même s'ils sont également liés à une autre classe? – Evan

+0

La cascade supprime la * relation *, pas l'entité. –

+0

cool :), va essayer! – Evan

0

Vous devez parcourir chaque StudentObj qui référence ce ClassObj et supprimer la référence. Ceci est nécessaire pour maintenir l'intégrité référentielle.

+0

J'ai essayé de supprimer toutes les classes et tous les étudiants, puis d'appeler entity.SaveChanges() (en utilisant deux instructions foreach et leurs collections et en appelant deleteobject dans la boucle) et je reçois toujours le même message d'erreur. Des idées? – Evan

0

En admettant que je vous ai bien compris (et qui est une grande hypothèse) ...

Tableau de classe -> Class_Student_Junction Tableau < - Table des élèves

Il me semble que vous devez faire en deux étapes. Le problème dans mon esprit est la table de jonction que vous avez faite, qui a des contraintes. Sans le mettre dans le code, je dirais ...

Etape 1: Notez la clé de la classe que vous voulez supprimer

Étape 2: Supprimer tous des tables de jonction où la clé étrangère pour les classes est égale à la classe de l'étape 1.

étape 3: Suppression de l'enregistrement de classe de la table des classes. Il ne devrait y avoir aucune violation clé dans cet ordre.

+0

Hahaha, oui tu me comprends :). Merci pour votre réponse. Comment supprimez-vous directement des tables de jonction du framework d'entités? Existe-t-il un moyen de faire ce que vous avez décrit sans avoir à travailler directement avec la base de données? – Evan

Questions connexes