2009-06-01 9 views
5

Si je une relation many-to-many entre utilisateurs et rôles et j'ai une instance d'une entité utilisateur et plusieurs rôles Ids puis-je insérer une relation entre les deux types d'entités sans avoir d'autre rôle données et sans faire une sélection sur les rôles d'abord?Comment insérer une entité pour une relation plusieurs-à-plusieurs? (structure d'entité)

Mise à jour:

Je ne pourrais pas avoir été assez clair. Je n'ai pas d'instance de rôle, seul l'identifiant de rôle. Est-il possible de créer la relation entre Utilisateur et Rôle sans remplir d'abord un objet Rôle depuis la base de données?

Répondre

9

Oui si vous avez les cartes d'identité et vous devez les rapporter

Vous devriez être en mesure de le faire (code pseudo)

// how you get this doesn't matter so long as it is in the Context 
User user = ...; 
Role role = new Role {Id = 2}; 
// role 2 is in unchanged state 
ctx.AttachTo("Roles", role); 
// role 2 is unchanged + added relationship between user and role 2 
user.Roles.Add(role); 
ctx.SaveChanges(); 

La clé ici est que AttachTo met une entité dans le ObjectState gestionnaire à l'état inchangé. Tant que vous n'avez pas besoin de modifier cette entité et que vous l'utilisez uniquement pour la création de relations, vous n'avez même pas besoin de connaître toutes les valeurs de propriété, le PK est suffisant.

Une fois que vous l'avez attaché, vous pouvez ensuite construire la relation.

Hope this helps

Vive Alex

+0

Merci, je vais essayer et vous dire comment ça se passe. – adam0101

+0

Super, ça marche pour moi. Merci –

2

Si vous n'utilisez pas la liaison de données, bien sûr. Beaucoup à beaucoup sont mappés comme une liste de références les uns aux autres. User.Roles.Add (Rôle ...) devrait être bon.

+1

Je n'ai pas une instance d'un rôle, je ne dispose que d'un identifiant de rôle. Cela fonctionnera-t-il si je crée un nouveau rôle et ne spécifie que l'identifiant? Va-t-il essayer de l'insérer dans la base de données? Espérons que non, parce qu'il existe déjà là. – adam0101

Questions connexes