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 ?
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
Vous devez vous connecter pour publier un commentaire.
Le problème, c'est que votre Gestionnaire de base de données et ne pas utiliser le même DbContext. Ainsi, lorsque vous envoyez un utilisateur dans le cadre de votre DB pour le Gestionnaire, il va la traiter comme un "nouveau", puis vous ne pouvez pas supprimer de la rôle. Vous avez deux manières de se rendre ici. Le plus facile est d'obtenir de l'Utilisateur à partir de votre Gestionnaire.
La plus élégante façon est de commencer à l'aide d'un DI-cadre comme AutoFac (https://code.google.com/p/autofac/wiki/MvcIntegration) et de définir votre DbContext comme InstancePerApiRequest.
OriginalL'auteur Rikard
Mes rôles sont gérées dans la graine de la méthode de mon DbMigrationsConfiguration classe et je l'ai renommé comme ceci:
OriginalL'auteur woggles