2013-03-29 5 views
1

I a créé une fonction de mise à jour des enregistrements dans une base de données comme:mise à jour plusieurs à plusieurs EF

Users (UserId, Name) 
    UsersRoles (UserId, RoleId) 
    Roles (RoleId, Name) 

Je passe parameter_user et parameter_role à la fonction. S'ils se trouvent dans les tables respectives, mettez à jour les données. Cependant, il ne met pas à jour les données, mais les met à chaque fois.

Ainsi, si la table UsersRoles ressemble à ceci:

10 25 
10 23 
10 28 
11 25 
11 32 

et je voulais mettre à jour la ligne 23 à 10 10 27, il ajoute un enregistrement 10 27, mais il laisse 10 23. je suppose vous ne pouvez pas changer parce que c'est un double FK. Mais comment supprimer l'ancien enregistrement 10 23?

La fonction est comme ceci:

  var user = (from r in context.Users where r.UserId.Equals(parameter_user) select r).FirstOrDefault(); 
     Roles role; 
     if (parameter_role > 0) 
     { 
      role = (from r in context.Roles where r.RoleId.Equals(parameter_role) select r).FirstOrDefault(); 
      if (role == null) return false; 
      if (user != null) 
      { 
       role.Users.Add(user); 
      } 
       role.Name = "Paul"; 
      } 

merci beaucoup bye

Répondre

1

Vous voulez ajouter 27 rôle à l'utilisateur 10 et de supprimer le rôle 23 de l'utilisateur 10. Vous devez faire exactement ces deux étapes "mettre à jour" la table UserRoles (il s'agit en fait d'un INSERT et d'un DELETE).

Il ressemblerait à ceci:

if (parameter_role > 0) 
{ 
    var user = (from r in context.Users.Include("Roles") // include the roles 
       where r.UserId.Equals(10) // parameter_user 
       select r).FirstOrDefault(); 

    if (user != null) 
    { 
     Roles oldRole = (from r in user.Roles 
         where r.RoleId.Equals(23) 
         select r).FirstOrDefault(); 
     if (oldRole != null) 
      user.Roles.Remove(oldRole); 

     Roles newRole = (from r in context.Roles 
         where r.RoleId.Equals(27) // parameter_role 
         select r).FirstOrDefault(); 
     if (newRole != null) 
      user.Roles.Add(newRole); 

     user.Name = "Paul"; 
    } 
} 

Si vous souhaitez supprimer tous anciens rôles et ajouter que le nouveau rôle 27 il suffit d'utiliser user.Roles.Clear() au lieu de ...Remove(oldRole):

//... 
    if (user != null) 
    { 
     user.Roles.Clear(); 

     Roles newRole = ... // etc. 
     //... 
    } 
+0

merci Slauma , le problème est que je n'ai pas l'ancien (23), mais seulement le nouveau (27). Le vieux que je dois récupérer tout en mettant à jour l'ancien record, comment puis-je? – user2080358

+0

En pratique, je dois supprimer l'enregistrement uniquement dans la table UsersRoles, comment le faire? – user2080358

+0

@ user2080358: Vous devez probablement utiliser le 'Clear' alors dans le second extrait de code si vous voulez supprimer tous les anciens rôles de l'utilisateur. – Slauma

Questions connexes