【问题标题】:Update/Edit data using repository MVC使用存储库 MVC 更新/编辑数据
【发布时间】:2018-07-02 11:56:45
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    DbContext 实例“知道”从中提取、添加到其中的对象等等(它没有跟踪它,因此它认为它是一个新对象并尝试添加它)。

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

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

    【讨论】:

    • 只是总结所有这些并给出一个简短的答案,在选择对象时使用 DbContext 实例,使用您想要的新值更新它,并使用相同的 DbContext 更新实体,之后保存更改。这将更新您从数据库中恢复的实体,而不是尝试添加新实体。
    猜你喜欢
    • 2015-05-12
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多