У вас есть 2 решения для этой ситуации.
Решение 1: Напишите статистику SQL, которая будет обновлять вашу базу данных напрямую, без использования UnitOfWork. Я не рекомендую этот способ, потому что этот случай не настолько особенный, чтобы сделать это. Ваш UnitOfWork должен справиться с этим.
Решение 2:
Шаг 1: Внутри вашего UnitOfWork попытайтесь получить только что добавленный идентификатор автомобиля.
Шаг 2: Обновите объект бронирования с помощью идентификатора автомобиля.
Пример кода:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult UpdateBooking([DataSourceRequest] DataSourceRequest request, Car car, Booking booking, CarBookings vm)
{
int carId = unitOfWork.CarRepository.Update(car);
booking.Car_Id = carId;
unitOfWork.BookingRepository.Update(booking);
unitOfWork.Save();
return Json(new[] { vm }.ToDataSourceResult(request, ModelState));
}
Так как вы спрашиваете меня, как обновить только те данные, которые изменены. Я дам вам шаги, чтобы сделать это.
Шаг 1: Получить объект из UnitOfWork.
Шаг 2: Обновление свойств, которые были обновлены.
Пример кода: В этом примере updateBooking - это объект, который содержит только поля для обновления (поля, которые имеют новое значение), некоторые, если его поля могут быть нулевыми, bookInDb - это объект из текущей базы данных (содержит старое значение).
public void UpdateBooking(Booking updatingBooking)
{
**INIT UNIT OF WORK**
Booking bookingInDb=unitOfWork.BookingRepository.Find(updatingBooking.Id);
//updatingBooking.Id might be null, you need to pass the Id of the row you want to update
bookingInDb.BookingStart=updatingBooking.BookingStart;
//We update only BookingStart but not BookingEnd or Car_Id
unitOfWork.BookingRepository.Update(bookingInDb);
unitOfWork.Save();
}