public async Task <ActionResult> Create(TeamCreateViewModel model) { if (ModelState.IsValid) { try { var team = new Team() { Name = model.Name }; _context.Team.Add(team); await _context.SaveChangesAsync(); TempData["Message"] = "Team " + team.Name + " inserted successfully!"; ModelState.Clear(); } catch (Exception ex) { TempData["Message"] = "Error: " + ex.Message; } } return(View()); }
public async Task <ActionResult> Create(ChampionshipCreateViewModel model) { //Fill the Team SelectList with the available teams. #region Filling TeamSelectList var teamList = await _context.Team.ToListAsync(); foreach (var team in teamList) { model.TeamSelectList.Add(new SelectListItem() { Text = team.Name, Value = team.Id.ToString() }); } #endregion if (ModelState.IsValid) { #region Validations var countSelectedTeams = model.TeamIdList.Count; //Verify if the number of selected teams is a power of two. if (!Tools.IsPowerOfTwo(countSelectedTeams)) { throw new Exception("The number of selected teams must be a power of 2."); } #endregion try { var championship = new Championship() { Name = model.Name, Active = true }; var teamChampionshipList = new List <TeamChampionship>(); var positionHash = Tools.RandomizePositions(model.TeamIdList.Count); var counter = 0; //Creates a TeamChampionship for each position in the positionHash (positions = count of teams) foreach (var position in positionHash) { teamChampionshipList.Add(new TeamChampionship() { Championship = championship, Team = await _context.Team.FindAsync(model.TeamIdList[counter]), //Maybe there's a better way to do this? TreePosition = position, TeamActive = true }); counter++; } using (_context) { _context.TeamChampionship.AddRange(teamChampionshipList); await _context.SaveChangesAsync(); } TempData["Message"] = "Championship " + championship.Name + " created successfully!"; } catch (Exception ex) { TempData["Message"] = "Error: " + ex.Message; } } return(View(model)); }