Esempio n. 1
0
        public async Task <IActionResult> Post([FromBody] ScheduledFlight model)
        {
            int?newScheduledFlightId = null;

            using (var connection = new SqlConnection(_connectionString))
            {
                await connection.OpenAsync();

                var transaction = connection.BeginTransaction();

                try
                {
                    var insertScheduledFlightSql = @"
INSERT INTO [dbo].[ScheduledFlight]
           ([FlightNumber]
           ,[DepartureAirportId]
           ,[DepartureHour]
           ,[DepartureMinute]
           ,[ArrivalAirportId]
           ,[ArrivalHour]
           ,[ArrivalMinute]
           ,[IsSundayFlight]
           ,[IsMondayFlight]
           ,[IsTuesdayFlight]
           ,[IsWednesdayFlight]
           ,[IsThursdayFlight]
           ,[IsFridayFlight]
           ,[IsSaturdayFlight])
     VALUES
           (@FlightNumber
           ,@DepartureAirportId
           ,@DepartureHour
           ,@DepartureMinute
           ,@ArrivalAirportId
           ,@ArrivalHour
           ,@ArrivalMinute
           ,@IsSundayFlight
           ,@IsMondayFlight
           ,@IsTuesdayFlight
           ,@IsWednesdayFlight
           ,@IsThursdayFlight
           ,@IsFridayFlight
           ,@IsSaturdayFlight);
SELECT CAST(SCOPE_IDENTITY() as int)";
                    newScheduledFlightId = await connection.ExecuteScalarAsync <int>(insertScheduledFlightSql, model, transaction);

                    model.Id = newScheduledFlightId.Value;
                    var flights = model.GenerateFlights(DateTime.Now, DateTime.Now.AddMonths(12));

                    var insertFlightsSql = @"INSERT INTO [dbo].[Flight]
           ([ScheduledFlightId]
           ,[Day]
           ,[ScheduledDeparture]
           ,[ActualDeparture]
           ,[ScheduledArrival]
           ,[ActualArrival])
     VALUES
           (@ScheduledFlightId
           ,@Day
           ,@ScheduledDeparture
           ,@ActualDeparture
           ,@ScheduledArrival
           ,@ActualArrival)";

                    await connection.ExecuteAsync(insertFlightsSql, flights, transaction);

                    throw new Exception("OH NOES!");
                    transaction.Commit();
                }
                catch (Exception ex)
                {
                    //Log the exception (ex)
                    try
                    {
                        transaction.Rollback();
                    }
                    catch (Exception ex2)
                    {
                        // Handle any errors that may have occurred
                        // on the server that would cause the rollback to fail, such as
                        // a closed connection.
                        // Log the exception ex2
                    }
                    return(StatusCode(500));
                }
            }
            return(Ok(newScheduledFlightId));
        }