/// <summary> /// Method to update mechanisms of a game /// </summary> /// <param name="selectedMechanisms">mechanisms to apply</param> /// <param name="gameToUpdate">Game that needs changes</param> public void UpdateGamesMechanisms(string[] selectedMechanisms, Game gameToUpdate) { if (selectedMechanisms == null) { gameToUpdate.MechanismsGames = new List <MechanismsGames>(); return; } var selectedMecha = new HashSet <string>(selectedMechanisms); var gamesMecha = new HashSet <int> (gameToUpdate.MechanismsGames.Select(c => c.Mechanism.Id)); foreach (var m in _context.Mechanism) { if (selectedMecha.Contains(m.Id.ToString())) { if (!gamesMecha.Contains(m.Id)) { gameToUpdate.MechanismsGames.Add(new MechanismsGames() { GameId = gameToUpdate.Id, MechanismId = m.Id }); } } else { if (gamesMecha.Contains(m.Id)) { MechanismsGames mToRemove = gameToUpdate.MechanismsGames.FirstOrDefault(i => i.MechanismId == m.Id); _context.Remove(mToRemove); } } } }
public async Task <IActionResult> Create([Bind("Id,Name,Description,MinPlayer,MaxPlayer,MinimumAge,GameTime,Price,ReleaseDate,BuyLink,VideoLink,PictureLink,Validate,DifficultyId,IllustratorId,EditorId")] Game game, string[] selectedThemes, string[] selectedMs, string[] selectedMecha) { if (game.EditorId == -1) { game.EditorId = null; } if (game.DifficultyId == -1) { game.DifficultyId = null; } if (game.IllustratorId == -1) { game.IllustratorId = null; } if (selectedMecha != null) { game.MechanismsGames = new List <MechanismsGames>(); foreach (var mecha in selectedMecha) { var mechaToAdd = new MechanismsGames() { GameId = game.Id, MechanismId = int.Parse(mecha) }; game.MechanismsGames.Add(mechaToAdd); } } if (selectedMs != null) { game.MaterialSupportsGames = new List <MaterialSupportsGames>(); foreach (var ms in selectedMs) { var msToAdd = new MaterialSupportsGames() { GameId = game.Id, MaterialSupportId = int.Parse(ms) }; game.MaterialSupportsGames.Add(msToAdd); } } if (selectedThemes != null) { game.ThemesGames = new List <ThemesGames>(); foreach (var t in selectedThemes) { var themeToAdd = new ThemesGames() { GameId = game.Id, ThemeId = int.Parse(t) }; game.ThemesGames.Add(themeToAdd); } } if (ModelState.IsValid) { _context.Add(game); await _context.SaveChangesAsync(); return(RedirectToAction(nameof(Index))); } else { var errors = ModelState.Select(x => x.Value.Errors) .Where(y => y.Count > 0) .ToList(); var test = errors; } ViewDataRelationOtM(game); ViewDataRelationMtM(game); return(View(game)); }