Asp.net 更新/编辑实体时不保存多对多

Asp.net 更新/编辑实体时不保存多对多,asp.net,asp.net-mvc-3,entity-framework,ef-code-first,many-to-many,Asp.net,Asp.net Mvc 3,Entity Framework,Ef Code First,Many To Many,我的控制器中的[HttpPost]编辑方法有问题,它没有保存对userrole所做的更改,这很奇怪,因为create方法正在工作,它使用的是相同的helper方法,这是我的代码: 视图模型: public class UserViewModel { public User User { get; set; } public virtual ICollection<AssignedUserRole> UserRoles { get; set; } public

我的控制器中的[HttpPost]编辑方法有问题,它没有保存对userrole所做的更改,这很奇怪,因为create方法正在工作,它使用的是相同的helper方法,这是我的代码:

视图模型:

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

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);
            }
        }
    }
private void AddOrUpdateRoles(用户用户,ICollection assignedUserRoles)
{
foreach(assignedUserRoles中的var assignedRole)
{
if(assignedRole.Assigned)
{
var userRole=newuserrole{Id=assignedRole.UserRoleId};
context.UserRoles.Attach(userRole);
user.UserRoles.Add(userRole);
}
}
}

用户对象中的所有内容都在更新中,但userrole除外。我在调试和执行逐步执行时,找不到问题,我可以看到用户分配了正确的/更新的角色。

我通过进行以下更改,解决了此问题:

 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);
    }
private void AddOrUpdateRoles(用户用户,ICollection assignedUserRoles)
{
foreach(assignedUserRoles中的var assignedRole)
{
if(assignedRole.Assigned)
{
var userRole=context.UserRoles.Find(assignedRole.UserRoleId);
user.UserRoles.Add(userRole);
}
}
}
[HttpPost]
公共操作结果编辑(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(用户,userViewModel.UserRoles);
SaveChanges();
返回操作(“索引”);
}
返回视图(userViewModel);
}
我必须“加载”用户的用户角色,否则清除什么也做不了

 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);
    }