public async Task <IActionResult> Edit(int id, [Bind("FlightId,DepartureName,DepartureLatitude,DepartureLongitude,DestinationName,DestinationLatitude,DestinationLongitude,FuelAmount,FuelConsumption,FlightTime,TakeoffEffort,Distance,Speed")] Flight flight) { if (id != flight.FlightId) { return(NotFound()); } if (ModelState.IsValid) { try { // Calculate the distance from the departure airport to the arrival airport double lat = flight.DepartureLatitude; double lon = flight.DepartureLongitude; var sCoord = new GeoCoordinate(lat, lon); lat = flight.DestinationLatitude; lon = flight.DestinationLongitude; var eCoord = new GeoCoordinate(lat, lon); double distance = sCoord.GetDistanceTo(eCoord) / 1000; flight.Distance = (int)distance; double consumption = flight.FuelConsumption; double takeoffEffort = flight.TakeoffEffort; // Calculate flight time and fuel amount flight.FuelAmount = (int)(consumption * distance + takeoffEffort); flight.FlightTime = TimeSpan.FromMinutes(Math.Round((distance / flight.Speed) * 60)); // Save flight entity in database _context.Update(flight); await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!FlightExists(flight.FlightId)) { return(NotFound()); } else { throw; } } return(RedirectToAction(nameof(Index))); } return(View("Edit", flight)); }
public void Add_writes_modify_in_database() { var options = new DbContextOptionsBuilder <FlyingContext>() .UseInMemoryDatabase(databaseName: "Add_writes_modify_database") .Options; // Run the test against one instance of the context using (var context = new FlyingContext(options)) { // Create a new flight var flight = new Flight(); flight.FlightId = 999; flight.DepartureName = "Ronald Reagan Washington National Airport"; flight.DepartureLatitude = 38.8521d; flight.DepartureLongitude = -77.037697d; flight.DestinationName = "Ken Jones Airport"; flight.DestinationLatitude = 18.1987991333d; flight.DestinationLongitude = -76.53450012210001d; flight.FuelConsumption = 1.26d; flight.TakeoffEffort = 1.001d; flight.Speed = 500; flight.FuelAmount = 999; flight.FlightTime = TimeSpan.FromMinutes(999); flight.Distance = 999; // Save the flight in the data base context.Add(flight); context.SaveChangesAsync(); } // Use a separate instance of the context to verify correct data was saved using (var context = new FlyingContext(options)) { Assert.AreEqual(1, context.Flights.Count()); Assert.AreEqual(999, context.Flights.Single().FlightId); Assert.AreEqual("Ronald Reagan Washington National Airport", context.Flights.Single().DepartureName); Assert.AreEqual(38.8521d, context.Flights.Single().DepartureLatitude); Assert.AreEqual(-77.037697d, context.Flights.Single().DepartureLongitude); Assert.AreEqual("Ken Jones Airport", context.Flights.Single().DestinationName); Assert.AreEqual(18.1987991333d, context.Flights.Single().DestinationLatitude); Assert.AreEqual(-76.53450012210001d, context.Flights.Single().DestinationLongitude); Assert.AreEqual(1.26d, context.Flights.Single().FuelConsumption); Assert.AreEqual(1.001d, context.Flights.Single().TakeoffEffort); Assert.AreEqual(500, context.Flights.Single().Speed); Assert.AreEqual(999, context.Flights.Single().FuelAmount); Assert.AreEqual(TimeSpan.FromMinutes(999), context.Flights.Single().FlightTime); Assert.AreEqual(999, context.Flights.Single().Distance); } // Modify some fields, unmodified fields must keep their old values using (var context = new FlyingContext(options)) { var flight = context.Flights.Find(999); Assert.AreNotEqual(null, flight); flight.DepartureName = "+Ronald Reagan Washington National Airport+"; flight.DestinationName = "+Ken Jones Airport+"; flight.FuelAmount = 888; // Save flight entity in database context.Update(flight); context.SaveChangesAsync(); } // Use a separate instance of the context to verify correct data was saved using (var context = new FlyingContext(options)) { Assert.AreEqual(1, context.Flights.Count()); Assert.AreEqual(999, context.Flights.Single().FlightId); Assert.AreEqual("+Ronald Reagan Washington National Airport+", context.Flights.Single().DepartureName); Assert.AreEqual(38.8521d, context.Flights.Single().DepartureLatitude); Assert.AreEqual(-77.037697d, context.Flights.Single().DepartureLongitude); Assert.AreEqual("+Ken Jones Airport+", context.Flights.Single().DestinationName); Assert.AreEqual(18.1987991333d, context.Flights.Single().DestinationLatitude); Assert.AreEqual(-76.53450012210001d, context.Flights.Single().DestinationLongitude); Assert.AreEqual(1.26d, context.Flights.Single().FuelConsumption); Assert.AreEqual(1.001d, context.Flights.Single().TakeoffEffort); Assert.AreEqual(500, context.Flights.Single().Speed); Assert.AreEqual(888, context.Flights.Single().FuelAmount); Assert.AreEqual(TimeSpan.FromMinutes(999), context.Flights.Single().FlightTime); Assert.AreEqual(999, context.Flights.Single().Distance); } }