public async Task <ActionResult <Customer> > CreateCustomerAndBook(Customer customer, int flightId, int purchasePrice) { _context.CustomerSet.Add(customer); await _context.SaveChangesAsync(); Booking booking = new Booking(); booking.CustomerID = customer.CustomerID; booking.FlightID = flightId; booking.PurchasePrice = purchasePrice; _context.BookingSet.Add(booking); await _context.SaveChangesAsync(); Flight flight = await _context.FlightSet.FindAsync(flightId); var count = flight.BookingSet.Count; if (count >= booking.Flight.Seats) { flight.Full = true; _context.Entry(flight).State = EntityState.Modified; await _context.SaveChangesAsync(); } return(CreatedAtAction("GetCustomer", new { id = customer.CustomerID }, customer)); }
public async Task <ActionResult <Models.BookingError> > PostBooking(Models.Booking bM) { Console.WriteLine(bM); Flight f = _context.FlightSet.Find(bM.FlightNo); if (f == null) { return(new Models.BookingError(404, "The flight was not find, please try again")); } Models.Flight fM = f.ConvertToFlightM(); if (fM.AvailableSeats <= 0) { return(new Models.BookingError(99, "The selected flight is already full")); } if (fM.Date < DateTime.Now) { return(new Models.BookingError(36, "The selected flight is not available")); } var calculatedPrice = fM.GetPrice(); Console.WriteLine(calculatedPrice); if (!fM.GetPrice().Equals(bM.Price)) { return(new Models.BookingError(103, "The selected price does not match. Please retry the booking")); } Passenger p = new Passenger { Surname = bM.Surname, GivenName = bM.GivenName, Weight = bM.Weight }; _context.PassengerSet.Add(p); try { await _context.SaveChangesAsync(); } catch (DbUpdateException) { throw; } Booking b = new Booking { FlightNo = bM.FlightNo, PassengerID = p.PersonID, PricePaid = bM.Price }; _context.BookingSet.Add(b); try { await _context.SaveChangesAsync(); } catch (DbUpdateException) { throw; } return(new Models.BookingError(500, "The booking was successfully registered")); }
public async Task <ActionResult <Flight> > PostFlight(Flight flight) { _context.FlightSet.Add(flight); await _context.SaveChangesAsync(); return(CreatedAtAction("GetFlight", new { id = flight.FlightID }, flight)); }
public static async void ChangeDataAsync() { CUI.MainHeadline("Start " + nameof(ChangeDataAsync)); using (var ctx = new WWWingsContext()) { // Define query var query = (from f in ctx.FlightSet.Include(p => p.BookingSet).ThenInclude(b => b.Passenger) where f.Departure == "Rome" && f.FreeSeats > 0 select f).Take(1); // Abfrage aynchron ausführen CUI.PrintWithThreadID("Start database query"); var flightSet = await query.ToListAsync(); CUI.PrintWithThreadID("End database query"); // Print results foreach (Flight flight in flightSet) { CUI.PrintWithThreadID("Flight: " + flight.FlightNo + " from " + flight.Departure + " to " + flight.Destination + " has " + flight.FreeSeats + " free seats"); foreach (var b in flight.BookingSet.Take(5)) { CUI.PrintWithThreadID(" Passenger: " + b.Passenger.GivenName + " " + b.Passenger.Surname); CUI.PrintWithThreadID(" Start saving"); b.Passenger.Status = 'A'; var count = await ctx.SaveChangesAsync(); CUI.PrintWithThreadID($" {count} Changes saved!"); } } CUI.Headline("End " + nameof(ChangeDataAsync)); } }
public async Task <ActionResult <PassengerM> > PostPassengerM(PassengerM passengerM) { var passenger = new Passenger(); if (passengerM == null) { return(NotFound()); } else { passenger.GivenName = passengerM.GivenName; passenger.Surname = passengerM.Surname; } _context.PassengerSet.Add(passenger); try { await _context.SaveChangesAsync(); } catch (DbUpdateException) { if (BookingExists(passenger.PersonID)) { return(Conflict()); } else { throw; } } return(CreatedAtAction("GetPassenger", new { id = passenger.PersonID }, passenger)); }
public static async void AsyncForeach() { CUI.MainHeadline("Start " + nameof(AsyncForeach)); WWWingsContext ctx = new WWWingsContext(); // Define query var query = (from f in ctx.FlightSet.Include(p => p.BookingSet).ThenInclude(b => b.Passenger) where f.Departure == "Rome" && f.FreeSeats > 0 select f).Take(1); // Executing und iterate query with ForEachAsync CUI.PrintWithThreadID("Print objects"); await query.ForEachAsync(async flight => { // Print results CUI.PrintWithThreadID("Flight: " + flight.FlightNo + " from " + flight.Departure + " to " + flight.Destination + " has " + flight.FreeSeats + " free Seats"); foreach (var p in flight.BookingSet) { CUI.PrintWithThreadID(" Passenger: " + p.Passenger.GivenName + " " + p.Passenger.Surname); } // Save changes to each flight object within the loop CUI.PrintWithThreadID(" Start saving"); flight.FreeSeats--; await ctx.SaveChangesAsync(); //not possible: var count = await ctx.SaveChangesAsync(); --> "New transaction is not allowed because there are other threads running in the session." CUI.PrintWithThreadID(" Changes saved!"); }); CUI.Headline("End " + nameof(AsyncForeach)); }
public static void Demo_ForeachProblem() { CUI.Headline(nameof(Demo_ForeachProblem)); WWWingsContext ctx = new WWWingsContext(); // Define query var query = (from f in ctx.FlightSet.Include(p => p.BookingSet).ThenInclude(b => b.Passenger) where f.Departure == "Rome" && f.FreeSeats > 0 select f).Take(1); // Query is performed implicitly by foreach foreach (var flight in query) { // Print results CUI.Print("Flight: " + flight.FlightNo + " from " + flight.Departure + " to " + flight.Destination + " has " + flight.FreeSeats + " free seats"); foreach (var p in flight.BookingSet) { CUI.Print(" Passenger " + p.Passenger.GivenName + " " + p.Passenger.Surname); } // Save change to every flight object within the loop CUI.Print(" Start saving"); flight.FreeSeats--; ctx.SaveChangesAsync(); // SaveChanges() will produce ERROR!!! CUI.Print(" End saving"); } }
public async Task <ActionResult <Booking> > PostBooking(Booking booking) { _context.BookingSet.Add(booking); try { await _context.SaveChangesAsync(); } catch (DbUpdateException) { if (BookingExists(booking.FlightNo)) { return(Conflict()); } else { throw; } } return(CreatedAtAction("GetBooking", new { id = booking.FlightNo }, booking)); }
public async Task <ActionResult <Flight> > PostFlight(Models.FlightM flight) { Flight f = new Flight(); f.Pilot = _context.PilotSet.Find(1); f.Seats = flight.Seats; f.BasePrice = flight.BasePrice; f.Date = flight.Date; f.Departure = flight.Departure; f.Destination = flight.Destination; _context.FlightSet.Add(f); try { await _context.SaveChangesAsync(); } catch (Exception e) { string t = e.Message; } return(CreatedAtAction("GetFlight", new { id = flight.FlightNo }, flight)); }
public async static void LINQ_MiscAsync() { CUI.MainHeadline("Start " + nameof(LINQ_MiscAsync)); var ort = "Berlin"; // Create context instance using (var ctx = new WWWingsContext()) { // Abfragen definieren, aber noch nicht ausführen IQueryable <Flight> query = (from x in ctx.FlightSet where x.Departure == ort && x.FreeSeats > 0 orderby x.Date, x.Departure select x); // Alternative: var query2 = ctx.FlightSet.Where(x => x.Departure == ort && x.FreeSeats > 0) .OrderBy(x => x.Date).ThenBy(x => x.Departure); // Count var count1 = await query.CountAsync(); CUI.Print(System.Threading.Thread.CurrentThread.ManagedThreadId + ": " + count1); // Execute query now List <Flight> flightSet = await query.ToListAsync(); CUI.Print(System.Threading.Thread.CurrentThread.ManagedThreadId + ": " + flightSet.Count); var flight = flightSet.Take(1).SingleOrDefault(); flight.FreeSeats--; var count2 = await ctx.SaveChangesAsync(); CUI.Print(System.Threading.Thread.CurrentThread.ManagedThreadId + ": " + count2); } }