我正在使用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);
}
答案 0 :(得分:1)
userInDb
是被跟踪的实体,而不是user
。因此,您应将新角色设置为userInDb
,以便EF可以跟踪Role
属性的更改:
userInDb.Role = db.Roles.Find(user.Role.Id);