Entity Framework: объект с таким же ключом уже существует в objectstatemanager

Я вижу, что этот вопрос задавался много, однако я непока не нашел ничего, что решило бы проблемуЯ имею.

Очевидно, яиспользуя Entity Framework для обновления записи. Однако, когда обновления завершены, всякий раз, когда я пытаюсь сохранить, я получаю следующее сообщение об ошибке:

An object with the same key already exists in the objectstatemanager

Сначала я передавал объект коллекции из представления, которое содержало копиюZipCodeTerritory модельный объектzipToUpdate, Я изменил код, вытащив этот объект и просто отправив соответствующие поля. Однако я'Я все еще получаю ту же ошибку.

Какие'Также странно, когда я впервые запускаю этот код, он отлично работает. Любая попытка после этого я получаю ошибку.

контроллер

Вот код из метода, вызывающего функцию редактирования

public static string DescriptionOnly(ZipCodeIndex updateZip)
{
    if (!string.IsNullOrWhiteSpace(updateZip.newEffectiveDate) || !string.IsNullOrWhiteSpace(updateZip.newEndDate))
    {
        return "Neither effective or end date can be present if updating Territory Code only; ";
    }

    _updated = 0;

    foreach (var zipCode in updateZip.displayForPaging.Where(x => x.Update))
    {
        ProcessAllChanges(zipCode, updateZip.newTerritory, updateZip.newStateCode, updateZip.newDescription, updateZip.newChannelCode);
    }

    _msg += _updated + " record(s) updated; ";

    return _msg;
}

И вот метод, который на самом деле делает обновление.

private static void ProcessAllChanges(ZipCodeTerritory zipToUpdate, string newTerritory, string newStateCode, string newDescription, string newChannelCode)
{
    try
    {
        if (!string.IsNullOrWhiteSpace(newTerritory)) zipToUpdate.IndDistrnId = newTerritory;
        if (!string.IsNullOrWhiteSpace(newStateCode)) zipToUpdate.StateCode = newStateCode;
        if (!string.IsNullOrWhiteSpace(newDescription)) zipToUpdate.DrmTerrDesc = newDescription;
        if (!string.IsNullOrWhiteSpace(newChannelCode)) zipToUpdate.ChannelCode = newChannelCode;
        if (zipToUpdate.EndDate == DateTime.MinValue) zipToUpdate.EndDate = DateTime.MaxValue;

        _db.Entry(zipToUpdate).State = EntityState.Modified;
        _db.SaveChanges();
        _updated++;
    }
    catch (DbEntityValidationException dbEx)
    {
        _msg += "Error during update; ";
        EventLog.WriteEntry("Monet", "Error during ProcessAllChanges: " + zipToUpdate.ToString() + " |EX| " + dbEx.Message);
    }
    catch (Exception ex)
    {
        _msg += "Error during update; ";
        EventLog.WriteEntry("Monet", "Error during ProcessAllChanges: " + zipToUpdate.ToString() + " |MESSAGE| " + ex.Message);
    }
}

РЕДАКТИРОВАТЬ

ZipCodeIndex объект содержит списокZipCodeTerritory модельные объекты. Это неt извлекается из запроса linq, но вместо этого просто передается обратно в контроллер из представления. Вот подпись метода контроллера, который запускает процесс:

[HttpPost]
public ActionResult Update(ZipCodeIndex updateZip, string button)

Ответы на вопрос(2)

Ваш ответ на вопрос