Ok, so if I move the logic around I no longer have any reference to a ViewModel in the UserRepository. I now have a method in the UserEditViewModel to perform the updates. My HttpPost Edit ActionResult in the UserController has also been updated. Does this
seem acceptable?
//In UserEditViewModel I have this new method
public User UpdateDomainModelUser(User user, IEnumerable<Role> roles)
{
user.UserName = this.UserName;
user.Email = this.Email;
user.FirstName = this.FirstName;
user.LastName = this.LastName;
user.PhoneExtension = this.PhoneExtension;
user.IsApproved = this.IsApproved;
foreach (RoleViewModel rvm in this.RoleViewModels)
{
if (rvm.Checked)
{
//add role if it doesn't exist
var roleToAdd = (from role in roles
where role.RoleId.Equals(rvm.Id)
select role).First();
if (roleToAdd != null)
user.Roles.Add(roleToAdd);
}
else
{
//remove role
var roleToRemove = from role in roles
where role.RoleId.Equals(rvm.Id)
select role;
if (roleToRemove.Count() == 1)
user.Roles.Remove(roleToRemove.ElementAt(0));
}
}
return user;
}
//And here is the updated UserController ActionResult
[HttpPost]
public ActionResult Edit(UserEditViewModel userEditViewModel)
{
if (ModelState.IsValid)
{
User user = unitOfWork.UserRepository.GetUserByID(userEditViewModel.UserId);
userEditViewModel.UpdateDomainModelUser(user, unitOfWork.RoleRepository.GetRoles());
unitOfWork.Save();
return RedirectToAction("Index");
}
return View(unitOfWork.UserRepository.GetUserByID(userEditViewModel.UserId));
}
outhowz42
Member
80 Points
121 Posts
Re: UnitOfWork pattern question
May 31, 2012 03:53 PM|LINK
Ok, so if I move the logic around I no longer have any reference to a ViewModel in the UserRepository. I now have a method in the UserEditViewModel to perform the updates. My HttpPost Edit ActionResult in the UserController has also been updated. Does this seem acceptable?
//In UserEditViewModel I have this new method public User UpdateDomainModelUser(User user, IEnumerable<Role> roles) { user.UserName = this.UserName; user.Email = this.Email; user.FirstName = this.FirstName; user.LastName = this.LastName; user.PhoneExtension = this.PhoneExtension; user.IsApproved = this.IsApproved; foreach (RoleViewModel rvm in this.RoleViewModels) { if (rvm.Checked) { //add role if it doesn't exist var roleToAdd = (from role in roles where role.RoleId.Equals(rvm.Id) select role).First(); if (roleToAdd != null) user.Roles.Add(roleToAdd); } else { //remove role var roleToRemove = from role in roles where role.RoleId.Equals(rvm.Id) select role; if (roleToRemove.Count() == 1) user.Roles.Remove(roleToRemove.ElementAt(0)); } } return user; } //And here is the updated UserController ActionResult [HttpPost] public ActionResult Edit(UserEditViewModel userEditViewModel) { if (ModelState.IsValid) { User user = unitOfWork.UserRepository.GetUserByID(userEditViewModel.UserId); userEditViewModel.UpdateDomainModelUser(user, unitOfWork.RoleRepository.GetRoles()); unitOfWork.Save(); return RedirectToAction("Index"); } return View(unitOfWork.UserRepository.GetUserByID(userEditViewModel.UserId)); }