2009-09-11 5 views
0

J'ai les tables de base de données suivantes:Modélisation Entity Framework v1 Many-to-Many Table de recherche Relation

Tableau 1: l'utilisateur
UserId
Nom d'utilisateur

Tableau 2: Rôle
RoleId
roleName

Table3: UserRole
ID utilisateur
RoleId

Un utilisateur peut avoir plusieurs rôles et un rôle peut avoir plusieurs utilisateurs. Lorsque je modélise ceci avec EF, j'obtiens une entité Utilisateur avec une liste d'entités UserRole. Ce que je veux, c'est un utilisateur avec une liste d'entités de rôle.

Existe-t-il un moyen de modéliser cette requête ou cette requête via LINQ pour renvoyer une entité utilisateur et les entités de rôle auxquelles elles appartiennent?

Merci
Dirk

Répondre

0

Si vous modélisez plusieurs à-plusieurs, la table au milieu n'apparaîtra dans votre modèle conceptuel. (Par exemple, vous n'aurez pas de classe "UserRole" dérivée de "EntityObject")

Si vous utilisez l'assistant EF, assurez-vous que votre table "UserRole" ne possède que ces deux champs et pas d'autres. Vérifiez également que vous avez créé les contraintes de clé étrangère sur les deux champs. si vous avez, alors l'assistant va créer une relation plusieurs-à-plusieurs.

La requête ressemble alors probablement quelque chose comme

using(MyObjectContext context = new MyObjectContext(someParameters)){ 
    var theUser = (from user in context.UserSet 
        where user.UserId = XY 
        select user).First(); 
    theUser.Roles.Load(); 
} 
+0

Pour une raison quelconque (duh!) Je mets des colonnes d'audit dans le tableau UserRole, donc bien sûr, il a modélisé le nombre-à-plusieurs de manière incorrecte. Après avoir supprimé les colonnes d'audit, il a été correctement mappé. Merci d'avoir répondu. – Dirk

+0

Vous pouvez également utiliser des relations many-2-many sur des tables avec plus que les champs fk (si ces autres champs ne sont pas nécessaires dans votre application). Mais pour ce faire, vous devez creuser profondément dans le code xml du fichier edmx. – Chrigl

Questions connexes