使用实体框架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时产生的错误。