2010-09-26 1 views
2

J'ai une table avec 3 colonnes: ID, Name, ParentID.Entity Framework: supprime l'enregistrement avec ses sous-dossiers

Comment puis-je supprimer un enregistrement spécifique avec tous ses enfants (n niveaux de profondeur)?

Utilisation d'Entity Framework 3.5.

+1

Ah, d'accord - vous avez oublié de mentionner la partie la plus délicate: la table est ** auto-référencement **! –

Répondre

5

que la table est le référencement auto est logique d'application, il n'est pas exprimée dans la définition SQL et est donc pas compris par EF.

Pour supprimer ces enregistrements via EF, vous devez écrire une routine qui commence en haut et charge tous les sous-éléments. Puis marquez tous ces éléments comme étant supprimés, puis appelez enregistrer les modifications.

Pour supprimer un élément:

context.DeleteObject(item); 
context.SaveChanges(); 
+0

que voulez-vous dire marquer tous les éléments comme supprimés? – shivesh

+0

@shivesh, j'ai mis à jour la réponse –

+0

Je sais comment supprimer des articles J'ai demandé ce qui est: "marquer tous ces éléments comme supprimés". Dois-je ajouter une nouvelle colonne à signaler pour suppression? – shivesh

2

In SQL Définissez la relation de base de données à supprimer en cascade, puis reconstruisez votre EDMX.

+0

Cascade? Mais cascade fonctionne avec plusieurs tables relation, j'ai seulement 1 table. – shivesh

1

@Shivesh - Je vous suggère d'utiliser une petite méthode implémentée avec recursion pour supprimer un fils, et tous ses parents. Ainsi, si un parent a des parents, vous pouvez également les supprimer, et ainsi de suite.

Une alternative pourrait être l'implémentation d'une procédure stockée, le lien correspondant dans EntityFramework, et faire la même chose.

Espoir qui aide,

+0

+ 1 probablement le plus facile à emballer dans un proc stocké et juste l'appeler de EF. –

+0

Eh bien, je sais que cela peut être fait en utilisant SP, mais j'ai posé des questions sur EF. – shivesh