2009-06-10 9 views
0

J'ai trois tables: Context, Component et ComponentContext. La table ComponentContext relie le composant et le contexte dans une relation N: M.N: M relation et suppression d'enregistrements

Je travaille sur un projet C# qui importe un tas de données dans ces tables. Il utilise un modèle Entité et, par conséquent, je ne vois qu'une entité Component et une entité Context dans mon code.

Maintenant, en utilisant seulement ces entités, est-il possible de supprimer le contenu des trois tables? Je pourrais, par exemple utiliser ceci:

foreach (var obj in CPE.Context) { CPE.DeleteObject(obj); } 

Pour supprimer tous les enregistrements de contexte. (CPE est le modèle d'entité de contexte.) Cela échoue, bien sûr, puisque le contexte a des relations avec les composants. J'ai donc besoin d'une autre méthode.

(Et oui, je peux utiliser SQL pour faire la même chose, mais il est pour une « preuve de facilité d'utilisation » pour le modèle d'entité, donc je veux le faire autant dans le modèle que possible.)

Répondre

0

Et puis J'ai remarqué la stupidité que j'ai faite dans mon code. Il se plaignait d'une référence à une autre table comme raison de ne pas supprimer les enregistrements de contexte. Depuis que je viens d'ajouter la nouvelle table ComponentContext, j'ai blâmé celui-là, mais je devrais vraiment lire ces messages d'erreur plus prudent la prochaine fois. (. Il y avait une autre table liée à la table de contexte)

Quoi qu'il en soit, de supprimer ces relations, ce code est assez:

foreach (var obj in CPE.Components.ToList()) 
{ 
    obj.Context.Load(); 
    foreach (var child in obj.Context.ToList()) { obj.Context.Remove(child); } 
    CPE.DeleteObject(obj); 
} 

J'utilise le ToList() par habitude, d'ailleurs. Il tend à éviter quelques exceptions liées à la direction dans laquelle .NET lira les enregistrements. Maintenant, il remplit d'abord une liste, puis parcourt la liste dans la direction que je préfère ...

Questions connexes