2015-02-10 60 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