代码之家  ›  专栏  ›  技术社区  ›  Yanayaya

如何在一个方法中更新两个表?

  •  0
  • Yanayaya  · 技术社区  · 7 年前

    我的MVC应用程序中有一个KendoUI网格。网格通过我的SQL数据库中的视图显示相关数据。它显示的两个表是 Cars Bookings

    表:汽车

    • 公共int Id
    • 公共字符串寄存器
    • 公共字符串模型

    表:预订

    • 公共日期时间预订开始
    • 公共日期时间预订
    • 公共内景车号

    @(Html.Kendo().Grid<MyProject.ViewModels.CarBookings>()
    .Name("Bookings")
    .Columns(columns => {
        columns.Bound(c => c.Id);
        columns.Bound(c => c.Car_Id);
        columns.Bound(c => c.Reg);
        columns.Bound(c => c.Make);
        columns.Bound(c => c.Model);
        columns.Bound(c => c.BookingStart).Format("{0:dd/MM/yyyy}");
        columns.Bound(c => c.BookingEnd).Format("{0:dd/MM/yyyy}");
        columns.Command(command => { command.Edit(); }).Width(250);
    })
    .Pageable()
    .Sortable()
    .Groupable()
    .Editable(editable => editable.Mode(GridEditMode.InLine))
    .DataSource(dataSource => dataSource
        .Ajax()
        .Model(model => {
            model.Id(p => p.Id);
            model.Field(p => p.Id).Editable(false);
            model.Field(p => p.Car_Id).Editable(false);
        })
        .Read(read => read.Action("GetBookings", "Bookings"))
            .Update(update => update.Action("UpdateBooking", "Booking")))
    ))
    

    这是你的名字 UpdateBooking 方法来更新这两个表。

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult UpdateBooking([DataSourceRequest] DataSourceRequest request, Car car, Booking booking, CarBookings vm)
    {
        unitOfWork.CarRepository.Update(car);
        unitOfWork.BookingRepository.Update(booking);
        unitOfWork.Save();
        return Json(new[] { vm }.ToDataSourceResult(request, ModelState));
    }
    

    Booking 正在从引用Id Car 所以它不起作用。有人能提供更好的方法来处理这种情况吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Red Wei    7 年前

    对于这种情况,您有两种解决方案。

    编写一个SQL语句,直接更新数据库,而不必经过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));
    }
    

    既然你问我如何只更新被改变的数据。我会给你一些步骤。

    从UnitOfWork获取对象。
    第二步: 更新已更新的属性。

    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();
    }
    
    推荐文章