无法清除用户配置文件<->角色关系(使用实体框架 5 和 MVC 4)



使用实体框架5,MVC 4和CheckBoxList 1.4.4.3-beta2从CodeProject,我只是试图清除一个多对多关系中的UserProfile对象角色关系。

UserProfileController (reduced -不保存标量属性和选择的角色):

    [Authorize]
    public ActionResult Edit(int identifier)
    {
        var unitOfWork = new UnitOfWork();
        using(var userProfileRepository = new UserProfileRepository(unitOfWork))
        {
            UserProfile user = userProfileRepository.AllIncluding(u => u.Roles).Single(u => u.UserId == identifier);
            UserProfileViewModel viewModel;
            using (var roleRepository = new RoleRepository(unitOfWork))
            {
                viewModel = new UserProfileViewModel()
                                {
                                    AllRoles = roleRepository.All.ToList(),
                                    UserProfile = user
                                };
            }
            return View(viewModel);
        }
    }
    [HttpPost]
    [Authorize]
    public ActionResult Edit(UserProfileViewModel viewModel, string[] roleIds)
    {
        var unitOfWork = new UnitOfWork();
        using (var userProfileRepository = new UserProfileRepository(unitOfWork))
        {
            if (ModelState.IsValid)
            {
                var user = userProfileRepository.AllIncluding(u => u.Roles).Single(u => u.UserId == viewModel.UserProfile.UserId);
                user.Roles.Clear();
                userProfileRepository.InsertOrUpdate(user);
                unitOfWork.Save();
                return RedirectToAction("Index");
            }
            return View(viewModel);
        }
    }

UserProfileRepository(和RoleRepository)是标准的支架存储库:

    public void InsertOrUpdate(UserProfile userprofile)
    {
        if (userprofile.UserId == default(int)) {
            // New entity
            context.UserProfiles.Add(userprofile);
        } else {
            //// Existing entity
            context.Entry(userprofile).State = EntityState.Modified;
        }
    }

UserProfile:

public ICollection<Role> Roles { get; set; }

角色:

public ICollection<UserProfile> UserProfiles { get; set; }

我没有得到异常,但也没有对数据库执行更新。它可能是由使用相同db表的身份验证提供程序(SimpleMembershipProvider)引起的吗?我应该实现自定义成员资格提供程序吗?在我的应用程序中,我还有几个其他的多对多关系,它们都以同样的方式组成,它们都像一个魅力。

这原来是我在UserProfile上重写Equals方法使所有比较返回false时产生的错误。