1

我正在使用 EF5 开发 ASP MVC 应用程序。我们正在尝试更新一个用户对象,其中包含一个权限列表、组和角色对象的外键。我们面临的问题是,虽然权限、组、用户密码等都得到了更新,但角色却没有。我们已经在 SO 上搜索了几个小时,但似乎无法实施有效的解决方案。当尝试更新我们的用户时,角色会正确传递,但不会在数据库中更新。

下面,您可以找到我们编辑页面的帖子。我们已经尝试将它附加到我们的数据库(这是数据库上下文),创建一个新的上下文以将其附加到和其他几个答案都无济于事。简而言之,我们很困惑,不知道如何将更新后的角色传递给我们的数据库。非常感谢您的阅读并希望回复。

  // POST: /User/Edit/5

  [HttpPost]
  [ValidateAntiForgeryToken]
  public ActionResult Edit(User user, string[] selectedPermissions, string[] selectedGroups)
  {
   var userInDb = db.Users.Find(user.Id);
   if (selectedPermissions != null || selectedGroups != null)
   {
    user.Permissions = userInDb.Permissions;
    user.Groups = userInDb.Groups;
   }

   if (user.Username != null && user.Password != null && user.Role != null && user.Person != null)
   {
    user.Person = db.People.Find(user.Person.IdCardNumber);
    user.Person = db.People.Find(user.Person.IdCardNumber);
    user.Role = db.Roles.Find(user.Role.Id);
    SavePerms(selectedPermissions, user);
    SaveGroups(selectedGroups, user);
    db.Entry(userInDb).CurrentValues.SetValues(user);
    db.SaveChanges();
    return RedirectToAction("Index");
   }
   return View(user);
  }
4

1 回答 1

1

userInDb是被跟踪的实体,而不是user。因此,您应该将新角色设置为,userInDb以便 EF 可以跟踪Role属性的更改:

userInDb.Role = db.Roles.Find(user.Role.Id);
于 2013-08-11T15:09:48.297 回答