У меня есть метод post в моем контроллере, который выглядит так, и я хочу, чтобы доступные смены уменьшались на 1 в любое время, когда я отправляю форму. Проблема в том, что когда я запускаю программу в первый раз и публикую форму, все работает отлично, но в последующие времена значения базы данных для AvailableSeats не уменьшаются на 1, она остается постоянной, и я не могу понять Зачем.Значения базы данных не меняются
[HttpPost]
public ActionResult Create(BookingViewModel viewModel)
{
if (viewModel.FromLocationId == viewModel.ToLocationId)
{
return RedirectToAction("Index");
}
var busFromDb = _context.Buses.First(c=>c.Id == viewModel.BusId);
var seatsFromDb = busFromDb.BusSeats;
var reduce = seatsFromDb - 1;
if (busFromDb != null)
{
var book = new Booking
{
AvailableSeats = reduce,
FromLocationId = viewModel.FromLocationId,
ToLocationId = viewModel.ToLocationId,
BusId = viewModel.BusId,
DateTime = viewModel.DateTime,
};
_context.Bookings.Add(book);
}
_context.SaveChanges();
return RedirectToAction("Index", "Home");
}
Мои заказы Класс
public class Booking
{
[Required]
public int Id { get; set; }
public FromLocation FromLocation { get; set; }
public int FromLocationId { get; set; }
public ToLocation ToLocation { get; set; }
public int ToLocationId { get; set; }
public Bus Bus { get; set; }
[Required]
public int BusId { get; set; }
public DateTime DateTime { get; set; }
public int AvailableSeats { get; set; }
}
Мой автобус класс
public class Bus
{
public int Id { get; set; }
public string BusNumber { get; set; }
public BusService BusService { get; set; }
public int BusSeats { get; set; }
}
В соответствии с просьбой, это мой DbContext CLAS s
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public DbSet<Bus> Buses { get; set; }
public DbSet<Booking> Bookings { get; set; }
public DbSet<FromLocation> FromLocations { get; set; }
public DbSet<ToLocation> ToLocations { get; set; }
public ApplicationDbContext()
: base("DefaultConnection", throwIfV1Schema: false)
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
}
После этого я инициализировал его в своем контроллере.
public class BookingsController : Controller
{
private ApplicationDbContext _context;
public BookingsController()
{
_context = new ApplicationDbContext();
}
вы отслеживаемые свой ActionResult? это проходит через утверждение? – Valkyrie
@ Valkyriee, и он не прошел первое утверждение if, потому что мой параметр FromLocation не равен моему ToLocation, поэтому, если он прошел через второй, и я видел, что значения меняются, но когда он сохраняется в базе данных, доступные значения остаются неизменными. –
@ shA.t уже пробовал это, но это заставит BusSeats уменьшиться, и это не то, что я хочу. –