使用asp.net标识更新用户角色
发布时间:2020-12-16 03:59:38 所属栏目:asp.Net 来源:网络整理
导读:我有以下问题.使用下面的代码更改用户的当前角色时,我收到如下消息的异常: [HttpPost] [ValidateAntiForgeryToken] public virtual ActionResult Edit(User user,string role) { if (ModelState.IsValid) { var oldUser = DB.Users.SingleOrDefault(u = u.I
我有以下问题.使用下面的代码更改用户的当前角色时,我收到如下消息的异常:
[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); } 附加“Models.Entities.User”类型的实体失败,因为同一类型的另一个实体已具有相同的主键值.如果图中的任何实体具有冲突的键值,则在使用“附加”方法或将实体的状态设置为“未更改”或“已修改”时,可能会发生这种情况.这可能是因为某些实体是新的并且尚未收到数据库生成的键值.在这种情况下,使用“添加”方法或“已添加”实体状态来跟踪图形,然后根据需要将非新实体的状态设置为“未更改”或“已修改”. 有人知道这个问题的一个很好的解决方案吗? 解决方法
问题是您的Manager和DB不使用相同的DbContext.因此,当您将用户从数据库上下文发送到Manager时,它会将其作为“新”用户处理 – 然后您无法将其从角色中删除.你有两种方式去这里.最简单的方法是从您的经理那里获取用户.
[HttpPost] [ValidateAntiForgeryToken] public virtual ActionResult Edit(User user,string role) { if (ModelState.IsValid) { // THIS LINE IS IMPORTANT var oldUser = Manager.FindById(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); } 更优雅的方式是开始使用像AutoFac(https://code.google.com/p/autofac/wiki/MvcIntegration)这样的DI框架,并将DbContext设置为InstancePerApiRequest. builder.RegisterType<YourDbContext>().As<DbContext>().InstancePerApiRequest(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc-3 – 如何将模型传递给MVC 3 Razor“masterpag
- ASP.NET MVC jquery自动填充值和文本字段
- asp.net-mvc – ASP.NET MVC PostAuthorizeRequest(和其他事
- asp.net-mvc – 使用ASP.NET MVC2中的DataAnnotations显示友
- asp.net – Android C2DM获取(401)未经授权
- ASP.net MVC路由:使用QueryStrings是一种好的风格吗?
- asp.net – 从ASP启动/停止服务. NET页面
- asp.net – Cookie域优先?
- ASP.NET应用程序的国际化
- 从ASP.NET导出的word文件中添加页眉/页脚
推荐文章
站长推荐
- asp.net-mvc – 如何使用ASP.NET MVC的plupload包
- asp.net – 值得学习经典ASP?
- Asp.Net App Pool重叠回收时间?
- asp.net – 如果Elmah无法访问数据库以记录异常,
- 如何实现对上下文(Context)数据的统一管理 [提
- ASP.NET MVC3中的HTML反而不是JSON的IIS响应
- ASP.NET:使用混合的HTML格式本地化内容
- asp.net-mvc – 实体创建抛出“没有为此对象定义
- asp.net – 如何在Button Click事件上调用此Jque
- asp.net – Application_Start和Application_OnS
热点阅读