Update/Edit 数据使用存储库 MVC

Update/Edit data using repository MVC

我之前学习过如何使用存储库 insert/add 数据,并且我尝试将其应用到 updating/editing。但是当我 运行 程序时,它似乎没有找到 id 并继续创建一个新条目。

控制器:

 //EDIT
    public ActionResult Edit(int id)
    {
        Driver editDriver = db.Drivers.Find(id);
        return View();
    }

    [HttpPost]
    public ActionResult Edit(DriverViewModel DVM)
    {
        var repo = new ManagementRepository();
        var driver = new Driver();         

        driver.DriverLastName = DVM.DriverLastName;
        driver.DriverFirstName = DVM.DriverFirstName;
        driver.DriverLicense = DVM.DriverLicense;
        driver.LicenseExpiry = DVM.LicenseExpiry;
        driver.MobileNumber = DVM.MobileNumber;
        driver.BusinessUnit = DVM.BusinessUnit;

        repo.UpdateDriver(driver);
        return RedirectToAction("List");
    }
}

存储库:

public void UpdateDriver(Driver updateDriver)
    {
        using (var db = new VehicleReservationEntities())
        {
            var existingDriver = (from data in db.Drivers
                                  where data.DriverID == updateDriver.DriverID
                                  select data).FirstOrDefault();

            db.SaveChanges();
        }
    }

假设您在这里使用 EntityFramework,您的存储库丢失您尝试更新的实体的原因是因为您使用的是不同的 DbContext 实例。

DbContext 实例是 "aware" 从中提取、添加到其中等对象的对象,但您正在做的是从一个 DbContext(正在跟踪它)中抓取一个对象并发送它到另一个 DbContext(它没有跟踪它,因此它认为它是一个新对象并尝试添加它)。

我还建议(因为您正在使用 Asp.Net)在您的控制器中使用依赖注入来避免这个确切的问题。

希望这对您有所帮助,祝您好运。