private void UpdateUser(string[] selectedPartys, string[] selectedRegions, string[] selectedShelters, string[] selectedTrails, AppUser userToUpdate) { if (selectedPartys == null || selectedRegions == null || selectedShelters == null || selectedTrails == null) { if (selectedPartys == null) { userToUpdate.PermissionPartys = new List <PermissionParty>(); } if (selectedRegions == null) { userToUpdate.PermissionRegions = new List <PermissionRegion>(); } if (selectedShelters == null) { userToUpdate.PermissionShelters = new List <PermissionShelter>(); } if (selectedTrails == null) { userToUpdate.PermissionTrails = new List <PermissionTrail>(); } return; } var selectedPartysHS = new HashSet <string>(selectedPartys); var userPartys = new HashSet <int> (userToUpdate.PermissionPartys.Select(c => c.Party.IdParty)); foreach (var party in _appDbContext.Partys) { if (selectedPartysHS.Contains(party.IdParty.ToString())) { if (!userPartys.Contains(party.IdParty)) { userToUpdate.PermissionPartys.Add(new PermissionParty { IdUser = userToUpdate.Id, IdParty = party.IdParty }); } } else { if (userPartys.Contains(party.IdParty)) { PermissionParty partyToRemove = userToUpdate.PermissionPartys.FirstOrDefault(i => i.IdParty == party.IdParty); _appDbContext.Remove(partyToRemove); } } } var selectedRegionsHS = new HashSet <string>(selectedRegions); var userRegions = new HashSet <int> (userToUpdate.PermissionRegions.Select(c => c.Region.IdRegion)); foreach (var region in _appDbContext.Regions) { if (selectedRegionsHS.Contains(region.IdRegion.ToString())) { if (!userRegions.Contains(region.IdRegion)) { userToUpdate.PermissionRegions.Add(new PermissionRegion { IdUser = userToUpdate.Id, IdRegion = region.IdRegion }); } } else { if (userRegions.Contains(region.IdRegion)) { PermissionRegion regionToRemove = userToUpdate.PermissionRegions.FirstOrDefault(i => i.IdRegion == region.IdRegion); _appDbContext.Remove(regionToRemove); } } } var selectedSheltersHS = new HashSet <string>(selectedShelters); var userShelters = new HashSet <int> (userToUpdate.PermissionShelters.Select(c => c.Shelter.IdShelter)); foreach (var shelter in _appDbContext.Shelters) { if (selectedSheltersHS.Contains(shelter.IdShelter.ToString())) { if (!userShelters.Contains(shelter.IdShelter)) { userToUpdate.PermissionShelters.Add(new PermissionShelter { IdUser = userToUpdate.Id, IdShelter = shelter.IdShelter }); } } else { if (userShelters.Contains(shelter.IdShelter)) { PermissionShelter shelterToRemove = userToUpdate.PermissionShelters.FirstOrDefault(i => i.IdShelter == shelter.IdShelter); _appDbContext.Remove(shelterToRemove); } } } var selectedTrailsHS = new HashSet <string>(selectedTrails); var userTrails = new HashSet <int> (userToUpdate.PermissionTrails.Select(c => c.Trail.IdTrail)); foreach (var trail in _appDbContext.Trails) { if (selectedTrailsHS.Contains(trail.IdTrail.ToString())) { if (!userTrails.Contains(trail.IdTrail)) { userToUpdate.PermissionTrails.Add(new PermissionTrail { IdUser = userToUpdate.Id, IdTrail = trail.IdTrail }); } } else { if (userTrails.Contains(trail.IdTrail)) { PermissionTrail trailToRemove = userToUpdate.PermissionTrails.FirstOrDefault(i => i.IdTrail == trail.IdTrail); _appDbContext.Remove(trailToRemove); } } } }
public async Task <IActionResult> Create(AppUser user, string[] selectedPartys, string[] selectedRegions, string[] selectedShelters, string[] selectedTrails) { if (selectedPartys != null) { user.PermissionPartys = new List <PermissionParty>(); foreach (var party in selectedPartys) { var partyToAdd = new PermissionParty { IdUser = user.Id, IdParty = int.Parse(party) }; user.PermissionPartys.Add(partyToAdd); } } if (selectedRegions != null) { user.PermissionRegions = new List <PermissionRegion>(); foreach (var region in selectedRegions) { var regionToAdd = new PermissionRegion { IdUser = user.Id, IdRegion = int.Parse(region) }; user.PermissionRegions.Add(regionToAdd); } } if (selectedShelters != null) { user.PermissionShelters = new List <PermissionShelter>(); foreach (var shelter in selectedShelters) { var shelterToAdd = new PermissionShelter { IdUser = user.Id, IdShelter = int.Parse(shelter) }; user.PermissionShelters.Add(shelterToAdd); } } if (selectedTrails != null) { user.PermissionTrails = new List <PermissionTrail>(); foreach (var trail in selectedTrails) { var trailToAdd = new PermissionTrail { IdUser = user.Id, IdTrail = int.Parse(trail) }; user.PermissionTrails.Add(trailToAdd); } } if (ModelState.IsValid) { _appDbContext.Add(user); await _appDbContext.SaveChangesAsync(); return(RedirectToAction(nameof(Index))); } PopulateUser(user); return(View(user)); }