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)在您的控制器中使用依赖注入来避免这个确切的问题。
希望这对您有所帮助,祝您好运。
我之前学习过如何使用存储库 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)在您的控制器中使用依赖注入来避免这个确切的问题。
希望这对您有所帮助,祝您好运。