2009-05-13 8 views
0

J'ai des entitésMany-to-many insert relation et supprimer

  • utilisateur:

id

Nom

navigation: Groupe

  • groupe:

id

Nom

navigation: mode

relation:

  • usrgrp

iduser

idgroup

Ici, je ne veux pas ajouter de données à la relation et non les entités principales. S'il vous plaît donnez-moi l'exemple comment supprimer et insérer dans usrgrp.

Merci d'avance. s.

Répondre

1

Entity Framework va intégrer la table usrgrp dans la navigation. Il n'y aura pas d'entité pour cela. Par conséquent, tous les accès à cette table se font uniquement via les entités Utilisateur et Groupe. Comme il s'agit d'une relation plusieurs à plusieurs, vous pouvez accéder à la relation de chaque extrémité de la même manière.

someUser.Group.Add(new Group()); 
someUser.Group.Remove(someExistingGroup); 
context.SaveChanges(); 
1

Craig est juste parce que la table usrgrp n'a que 2 FKs, il est un pur table de jointure, et en tant que tel Entity Framework interprète comme une association ManyToMany. Comme les exemples de code Craig a montré ci-dessus, c'est généralement bien pour la plupart des clients. Si toutefois vous voulez gérer indépendamment la relation UserGroup, une option consiste à ajouter une colonne supplémentaire à la table usrgrp, une colonne d'identité est probablement la plus facile. Entity Framework ne peut plus alors réduire cette table en seulement navigations, vous verrez donc une Entité pour la table usrgrp que vous pouvez manipuler indépendamment.

à savoir

someUser.UserGroups.Add(new UserGroup {User = someUser, Group = someGroup}); 

avis vous ne devez pas spécifier la colonne d'identité (ce qui serait une douleur) car il est généré magasin.

Généralement, la plupart des clients préfèrent ne pas voir une entité pour les tables de jointure pure, car l'expérience de programmation est plus simple sans cela.Par exemple les requêtes LINQ deviennent un peu plus compliqué:

ceci:

var users = from g in ctx.Groups 
      from u in g.Users 
      where g.Name == "Administrators" 
      select u; 

devient:

var users = from g in ctx.Groups 
      from ug in g.UserGroups 
      where g.Name == "Administrators" 
      select ug.User; 

espoir cette clarification supplémentaire aide

Alex

+0

Alors, comment sur la navigation propriétés pour EF 4.0? :) –

+0

Craig Je ne comprends pas votre question. Pouvez-vous clarifier? –

+0

Je veux pouvoir avoir des propriétés sur les navigations subsumées. À l'heure actuelle, une table ne sera subsumée que plusieurs-à-plusieurs si elle ne contient que les deux clés. Je veux la possibilité d'avoir (et lire/écrire), dans le client, d'autres champs dans les tables utilisées pour plusieurs-à-plusieurs. –

Questions connexes