2

使用来自 CodeProject 的 Entity Framework 5、MVC 4 和 CheckBoxList 1.4.4.3-beta2,我只是想清除多对多关系中的 UserProfile 对象角色关系。

UserProfileController(减少 - 不保存标量属性和选定的角色):

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

用户资料:

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

角色:

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

我没有例外,但也没有对数据库执行更新。这可能是由使用相同数据库表的身份验证提供程序(SimpleMembershipProvider)引起的吗?我应该实施自定义会员提供程序吗?我的应用程序中还有其他几个多对多关系都以与此相同的方式构成,它们都像魅力一样工作。

4

1 回答 1

0

结果是我在覆盖 UserProfile 上的 Equals 方法时犯了一个错误,使所有比较都返回 false。

于 2013-03-20T12:22:27.140 回答