public TeamViewModel Update(TeamViewModel vmTeam) { var existingTeam = _teamRepository.Get(vmTeam.Id); existingTeam.Name = vmTeam.Name; existingTeam.Address = vmTeam.Address; existingTeam.City = vmTeam.City; existingTeam.Country = vmTeam.Country; existingTeam.ImageUrl = vmTeam.ImageUrl; if (vmTeam.ManagerId != null) { var managerToUpdate = _memberRepository.GetManager(vmTeam.ManagerId.Value); if (managerToUpdate.Role == MemberRole.Manager) { existingTeam.AddManager(managerToUpdate); } } else { existingTeam.RemoveManager(); } //unselect unselected players foreach (var player in existingTeam.Players().ToList()) { if (!vmTeam.HasSelectedPlayer(player.Id)) { existingTeam.RemovePlayer(player); } } //select selected players foreach (var selectedPlayerId in vmTeam.SelectedPlayerIds) { if (!existingTeam.HasPlayer(selectedPlayerId)) { //todo: investigate EF bulk select //in this way, we try to call less times the user repo var playerToBeAdded = _memberRepository.GetPlayerWithNoTeam(selectedPlayerId); if (playerToBeAdded != null) { existingTeam.AddPlayer(playerToBeAdded); } } } _teamRepository.Update(existingTeam); return(existingTeam.ToViewModel()); }