La mise à jour du rôle de l'utilisateur à l'aide de asp.net identité

J'ai le problème suivant. Tout en utilisant le code suivant ci-dessous pour changer le courant de l'utilisateur le rôle que je suis une exception avec le message comme ci-dessous:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public virtual ActionResult Edit(User user, string role)
    {
        if (ModelState.IsValid)
        {
            var oldUser = DB.Users.SingleOrDefault(u => u.Id == user.Id);
            var oldRoleId = oldUser.Roles.SingleOrDefault().RoleId;
            var oldRoleName = DB.Roles.SingleOrDefault(r => r.Id == oldRoleId).Name;
            if (oldRoleName != role)
            {
                Manager.RemoveFromRole(user.Id, oldRoleName);
                Manager.AddToRole(user.Id, role);
            }
            DB.Entry(user).State = EntityState.Modified;

            return RedirectToAction(MVC.User.Index());
        }
        return View(user);
    }

Fixation d'une entité de type " Modèles.Les entités.L'utilisateur' a échoué en raison d'une autre entité du même type a déjà la même valeur de clé primaire. Cela peut se produire lors de l'utilisation de la "Attacher" la méthode ou la mise à l'état d'une entité à "Inchangé" ou "Modifié" si toutes les entités dans le graphe de conflit de valeurs de clé. Cela peut être parce que certaines entités sont nouveaux et n'ont pas encore reçu de base de données-clé générée de valeurs. Dans ce cas, utilisez la fonction 'Ajouter' méthode ou la "Ajoutée" état de l'entité pour suivre le graphique, puis de définir l'état de non-nouvelles entités à "Inchangé" ou "Modifié" selon le cas.

Quelqu'un sait une bonne solution à ce problème ?

Pourquoi allez-vous le contexte directement? Il serait plus facile et moins sujettes à l'erreur d'utiliser le UserManager et la RoleManager les classes.
Vous pourriez avoir un coup d'oeil à ma réponse sur ASP.NET MVC - Fixation d'une entité de type "MODELNAME" a échoué à cause d'une autre entité du même type a déjà la même valeur de clé primaire.

OriginalL'auteur | 2014-06-02