使用存储库MVC更新/编辑数据

时间:2018-07-02 11:56:45

标签: .net asp.net-mvc model-view-controller repository repository-pattern

我以前已经学习了如何使用存储库插入/添加数据,并尝试将其应用于更新/编辑。但是,当我运行该程序时,似乎没有找到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();
        }
    }

1 个答案:

答案 0 :(得分:0)

假设您在这里使用EntityFramework,那么您的存储库失去对您尝试更新的实体的跟踪的原因是因为您使用的是其他DbContext实例。

一个DbContext实例“意识到”从中提取,添加到它的对象,等等。但是您要做的是从一个DbContext(正在跟踪它)中抓取一个对象并将其发送到另一个DbContext。 (它不会跟踪它,因此为什么会认为它是一个新对象并尝试添加它)。

我也建议(因为您使用的是Asp.Net)将依赖性注入到控制器中,以避免出现此确切问题。

希望这会有所帮助,祝你好运。