使用来自 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)引起的吗?我应该实施自定义会员提供程序吗?我的应用程序中还有其他几个多对多关系都以与此相同的方式构成,它们都像魅力一样工作。