2015-02-10 52 views
-1

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

`  
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”类型的异常出现在 系统.Data.Entity.dll,但未在用户代码中处理

其他信息:属性'RoleId'是对象的关键信息的一部分,不能修改。

我该怎么办?提前致谢!

回答

0

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

0

RoleId被用作实体的关键约束和主要标识符。你不能改变这个ID。只是不要更新这个属性或添加更多的评论,你为什么需要更新它。

+0

因为我被要求可以改变用户的角色(例如从管理员到成员)。基本上升级/降级角色。 – bampie 2015-02-10 18:04:25

+0

准确。你想改变_this_角色。以后你会怎么看出你改变了这个角色?你应该有一些标识符,这样你就可以跟踪你改变的角色。如果您想更改角色,则可以更新其他属性(RoleId除外)。 – 2015-02-10 18:18:51

+0

也许添加一个新的ID? – bampie 2015-02-10 18:31:42

0

这就是说,RoleId是主键的一部分,无法更改。不要编辑webpages_UsersInRoles中的现有行,而应尝试删除该行并添加一个新的RoleId值。

+0

所以我应该在webpages_UsersInRoles中添加一个新行? – bampie 2015-02-10 18:05:14

+0

@bampie这就是我会推荐的。删除当前关系行并添加一个新行。 – 2015-02-10 18:05:38

+0

但是RoleID是另一个表的FK。删除它可以吗? – bampie 2015-02-10 18:10:51