0

我的控制器中的[HttpPost]編輯方法出現問題,它不保存對userrole所做的更改,這很奇怪,因爲create方法正在工作它使用的是相同的輔助方法,這是我的代碼:更新/編輯實體時多對多不保存

視圖模型:

public class UserViewModel 
{ 
    public User User { get; set; } 
    public virtual ICollection<AssignedUserRole> UserRoles { get; set; } 
    public virtual List<Company> Companies { get; set; } 
} 

控制器:

[HttpPost] 
    public ActionResult Edit(UserViewModel userViewModel) 
    { 
     if (ModelState.IsValid) 
     { 
      var user = userViewModel.User; 
      user.UserRoles.Clear(); 
      AddOrUpdateRoles(user, userViewModel.UserRoles); 
      context.Entry(user).State = EntityState.Modified; 
      context.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 
     return View(userViewModel); 
    } 

helper方法

private void AddOrUpdateRoles(User user, ICollection<AssignedUserRole> assignedUserRoles) 
    { 
     foreach (var assignedRole in assignedUserRoles) 
     { 
      if (assignedRole.Assigned) 
      { 
       var userRole = new UserRole { Id = assignedRole.UserRoleId }; 
       context.UserRoles.Attach(userRole); 
       user.UserRoles.Add(userRole); 
      } 
     } 
    } 

一切都在用戶對象被除UserRole的更新,因爲我調試,並通過做一步,我不能發現問題,我可以看到該用戶具有分配的正確/更新的角色。

回答

1

我能夠做以下修改來解決這個問題:

private void AddOrUpdateRoles(User user, ICollection<AssignedUserRole> assignedUserRoles) 
    { 
     foreach (var assignedRole in assignedUserRoles) 
     { 
      if (assignedRole.Assigned) 
      { 
       var userRole = context.UserRoles.Find(assignedRole.UserRoleId); 
       user.UserRoles.Add(userRole); 
      } 
     } 
    } 


[HttpPost] 
    public ActionResult Edit(UserViewModel userViewModel) 
    { 
     if (ModelState.IsValid) 
     { 
      var user = userViewModel.User; 
      context.Entry(user).State = EntityState.Modified; 
      context.Entry(user).Collection(u => u.UserRoles).Load(); 
      user.UserRoles.Clear(); 
      AddOrUpdateRoles(user, userViewModel.UserRoles); 
      context.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 
     return View(userViewModel); 
    } 

我不得不「裝載」的用戶,否則的UserRole結算是無所作爲。