Beispiel #1
0
        public async Task UpdateRound(RoundEditModel round)
        {
            if (round == null)
            {
                throw new ArgumentNullException(nameof(round));
            }

            // Update own props
            var roundToUpdate = await _context.Round.SingleAsync(s => s.Id == round.Id);

            roundToUpdate.Season = round.Season;
            roundToUpdate.Venue  = round.Venue;
            roundToUpdate.Note   = round.Note;
            roundToUpdate.Date   = round.Date;
            roundToUpdate.Number = round.Number;
            roundToUpdate.Name   = round.Name;
            roundToUpdate.Rain   = round.Rain.HasValue
        ? (int)round.Rain.Value
        : new int?();
            roundToUpdate.Status      = round.Status.ToString();
            roundToUpdate.Rating      = round.Rating;
            roundToUpdate.WinningTeam = round.WinningTeamId;
            _context.Update(roundToUpdate);
            await _context.SaveChangesAsync();

            // Update winners
            using (var transactionalQueryExecutor = _queryExecutor.BeginTransaction()) {
                try {
                    await transactionalQueryExecutor
                    .NewQuery("DELETE FROM [dbo].[RoundWinner] WHERE [Round]=@Round")
                    .WithCommandType(CommandType.Text)
                    .WithParameters(new { Round = round.Id })
                    .ExecuteAsync();

                    var winnersToAdd = round.WinningParticipantIds.Select(
                        wp => new RoundWinner {
                        Round       = round.Id,
                        Participant = wp
                    });
                    foreach (var winner in winnersToAdd)
                    {
                        await transactionalQueryExecutor
                        .NewQuery(
                            @"INSERT INTO [dbo].[RoundWinner]
                         ([Round]
                         ,[Participant])
                  VALUES
                         (@Round
                         ,@Participant)")
                        .WithCommandType(CommandType.Text)
                        .WithParameters(new { Round = winner.Round, Participant = winner.Participant })
                        .ExecuteAsync();
                    }
                    transactionalQueryExecutor.Commit();
                } catch {
                    transactionalQueryExecutor.Rollback();
                    throw;
                }
            }
        }
        public async Task <IActionResult> Edit(int?id, [Bind("Id,Name,Date,Number,Venue,Rain,Rating,Status,WinningTeamId,WinningParticipantIds[]")][ModelBinder(typeof(RoundEditModel.RoundEditModelBinder))] RoundEditModel round)
        {
            if (id == null)
            {
                return(NotFound());
            }
            if (id != round.Id)
            {
                return(NotFound());
            }

            var roundForValidation = await _roundService.LoadDataRecord(id.Value);

            roundForValidation.Season = round.Season;
            roundForValidation.Name   = round.Name;
            roundForValidation.Date   = round.Date;
            roundForValidation.Number = round.Number;
            roundForValidation.Venue  = round.Venue;
            roundForValidation.Note   = round.Note;
            await _roundModelStatePopulator.ValidateAndPopulateForUpdate(ModelState, id.Value, roundForValidation);

            if (ModelState.IsValid)
            {
                await _roundService.UpdateRound(round);

                var roundDisplayModel = await _roundService.LoadDisplayModel(id.Value);

                if (roundDisplayModel == null)
                {
                    return(NotFound());
                }
                return(RedirectToAction(nameof(Index), new { id = roundDisplayModel.Season }));
            }

            return(View(await _roundService.LoadDisplayModel(id.Value)));
        }