Suppression de tous les enregistrements à partir de propriétés de navigation dans le Cadre de l'Entité
J'ai 1:N relation entre le Programme et l'Étudiant tables EF transformée en une propriété de navigation. Maintenant, je veux supprimer tous les enregistrements de cette navigation étudiants.
J'ai commencé comme ça:
foreach(Student student in program.Students)
program.Students.Remove(student);
Mais je suis un peu sceptique à ce sujet.
Que j'ai essayé de cette façon:
while (program.Students.Count > 0)
program.Students.Remove(program.Students.ToList()[0]);
Mais cela semble bizarre aussi.
Est-il un moyen plus simple de faire ceci ou si pas qui est le meilleur?
OriginalL'auteur Vajda | 2011-05-30
Vous devez vous connecter pour publier un commentaire.
Je ne sais vraiment pas si ça va marcher ou pas, mais je ne peux pas l'aider, je suis curieux.
Est
program.Students.Clear()
de travail?Ou peut-être réinitialiser, de le réinitialiser?
J'espère que cela vous a aidé...
Edit: Merci d'utiliser @Ladislav Mrnka est la réponse qui est la bonne.
J'ai essayé de supprimer la réponse, mais je ne peut pas car il est accepté par un
En fait, je voulais dire que c'est très probablement que vous avez manquer..
Comme Ladislav dit,
Clear()
ne null hors de la FK. Si vous avez un type nullable ce ne sera pas jeter une erreur, mais le dossier de l'Élève sera toujours là. Si le FK colonne est non nullable puis il lèvera une erreur surSaveChanges()
. Je suis actuellement en utilisant EF5/6 Code-Première.Quand j'ai enlever avec la méthode Clear (). Eu cette erreur : échec de L'opération: La relation ne peut pas être changé parce que l'un ou plusieurs de la clé étrangère propriétés est pas les valeurs null. Lorsqu'une modification est apportée à une relation, la clé étrangère de la propriété est définie sur une valeur null. Si la clé étrangère ne prend pas en charge les valeurs null, une nouvelle relation doit être définie, la clé étrangère de la propriété doit être attribuée à une autre valeur non nulle, ou sans rapport avec l'objet doit être supprimé.
Ce n'est pas la réponse. À l'aide de "clear" pour effacer la propriété de navigation de collection ne supprime PAS les entités, et les résultats dans le message d'erreur décrit par Soren.
OriginalL'auteur Adrian Ancuta
Sauf si vous avez de très spécial association appelée l'identification de la relation entre votre programme et les étudiants que vous devriez utiliser quelque chose comme ceci:
Retrait de l'étudiant à partir de la propriété de navigation ne FK en l'étudiant à null, mais le record ne sera pas supprimé. Si FK est de ne pas accepter les valeurs null, vous obtiendrez une exception.
Méthode claire devrait rompre les relations mais cela ne supprimera pas les étudiants.
Je viens de vérifier mes données de tableau après l'appel de Clear(), toutes les données sont supprimées. Donc Clear() supprime toutes les données. Il peut se faire que si ces données sans rapport n'a pas indiqué quand je regarde dans le tableau de données, dans lequel je n'ai guère de doute. J'ai oubliée de dire que je l'appelle SaveChanges() après Clear(), Ladislav, peut-être que vous avez pensé à cela, sans faire appel SaveChanges() la méthode.
Comment est votre
Student
classe définie? Êtes-vous à l'aide de POCOs ou EntityObjects?Vieux, mais lors de l'utilisation de
Clear()
etRemove()
, je reçois une violation de clé étrangère. Lorsque j'utiliseDeleteObject()
, je ne reçois pas toutes les erreurs.OriginalL'auteur Ladislav Mrnka
.Méthode Clear() est très bonne. Il supprime toutes les propriétés de navigation dans la base de données. C'est simple, plutôt que de boucle foreach.
OriginalL'auteur Nguyễn Trọng Bằng