【问题标题】:Trouble editing the role无法编辑角色
【发布时间】:2015-04-10 21:13:06
【问题描述】:

我在编辑用户角色时遇到问题。我有这些代码:

    `    
 Entities db2 = new Entities();
        private UsersContext db = new UsersContext();

   //
            // POST: /AdminOnly/Edit/5
             [Authorize(Roles = "Owner")]
            [HttpPost]
            [ValidateAntiForgeryToken]
            public ActionResult Edit(UserProfile userprofile, int? roless)
            {
                if (ModelState.IsValid)
                {
                    webpages_UsersInRoles s = new webpages_UsersInRoles();

                    s = db2.webpages_UsersInRoles.Where(m => m.UserId == userprofile.UserId).FirstOrDefault();
                    if (s != null) //with existing role, edit it
                    {
                        s.RoleId = roless.Value;
                        db.Entry(userprofile).State = EntityState.Modified;
                        db2.Entry(s).State = EntityState.Modified;
                        db.SaveChanges();
                        db2.SaveChanges();
                        return RedirectToAction("Index");
                    }
                    else //no existing role
                    {
                       //some code here

                    }
                }
                ViewBag.roless = new SelectList(db2.webpages_Roles, "RoleId", "RoleName");
                return View(userprofile);
            }
    `

当我尝试在数据库中保存更改时,db2.SaveChanges(); 向我抛出一个错误,上面写着:

“System.InvalidOperationException”类型的异常发生在 System.Data.Entity.dll 但未在用户代码中处理

附加信息:属性“RoleId”是对象的一部分 关键信息,不可修改。

我该怎么办?提前致谢!

【问题讨论】:

    标签: c# asp.net-mvc razor roles


    【解决方案1】:

    RoleId 用作实体的键约束和主要标识符。您无法更改此 ID。只是不要更新这个属性或添加更多的 cmets 为什么需要更新它。

    【讨论】:

    • 因为我被要求可以更改用户的角色(例如从管理员到成员)。基本上是角色的升级/降级。
    • 没错。您想更改 this 角色。以及将来如何判断您更改了 this 角色?您应该有某种标识符,这样您就可以跟踪您更改了哪些角色。如果要更改角色,可以更新其他属性(RoleId 除外)。
    • 或许要添加一个新 ID?
    • 您的意思是添加一个新角色?您可以使用 db.Roles.Add(new Role { Prop1 = "something", Prop2 = "blabla" });语法。
    • 不。我在 StackOverflow 的某处读到,我可以向 pages_usersinrole 表添加一个 ID,该 ID 将以某种方式成为该表的主键。
    【解决方案2】:

    表示 RoleId 是主键的一部分,不能更改。不要编辑 pages_UsersInRoles 中的现有行,而是尝试删除该行并使用新的 RoleId 值添加一个新行。

    【讨论】:

    • 所以我应该在 pages_UsersInRoles 中添加一个新行?
    • @bampie 这就是我的推荐。删除当前的关系行并添加一个新的。
    • 但是 RoleID 是另一个表的 FK。可以删除吗?
    • 是的。您是在告诉系统此用户不再与此角色相关,因此删除该角色与删除该关系相同。
    • 所以总结一下,我将删除列'RoleID'并创建一个新的'RoleId'列?
    【解决方案3】:

    原来我要更改的列是复合外键。我需要删除RoleId 的第一个值并将更改保存到表中。并再次添加第二个值并将新更改保存到表中。感谢帮助过的人!

    【讨论】:

      猜你喜欢
      • 2014-07-14
      • 1970-01-01
      • 2021-04-15
      • 2011-08-19
      • 2021-07-23
      • 1970-01-01
      • 2018-05-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多