ASP MVC不会在编辑时更新一个相关对象

时间:2013-08-11 14:45:19

标签: c# asp.net-mvc entity-framework-5

我正在使用EF5开发ASP MVC应用程序。我们正在尝试更新User对象,该对象包含Role对象的权限,组和外键列表。我们面临的问题是,虽然权限,组,用户密码等都会更新,但角色却没有。我们已经在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);
  }

1 个答案:

答案 0 :(得分:1)

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

userInDb.Role = db.Roles.Find(user.Role.Id);