Обновление / редактирование данных с использованием репозитория MVC - PullRequest
0 голосов
/ 02 июля 2018

Ранее я узнал, как вставлять / добавлять данные с помощью репозитория, и я пытался применить это для обновления / редактирования. Но когда я запускаю программу, она, кажется, не находит идентификатор и продолжает делать новую запись.

Контроллер:

 //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 голосов
/ 02 июля 2018

Предполагая, что вы используете EntityFramework здесь, причина, по которой ваш репозиторий теряет отслеживание сущности, которую вы пытаетесь обновить, заключается в том, что вы используете другой экземпляр DbContext.

Экземпляр DbContext «знает» об объектах, которые извлекаются из него, добавляются к нему и т. Д., Но вы делаете захват объекта из одного DbContext (который отслеживает его) и отправку его другому DbContext. (который не отслеживает его, поэтому он считает, что это новый объект и пытается добавить его).

Также я бы рекомендовал (поскольку вы используете Asp.Net) использовать внедрение зависимостей в ваши контроллеры, чтобы избежать этой проблемы.

Надеюсь, это поможет, удачи.

...