Возникли проблемы при обновлении в проекте asp.net mvc - PullRequest
1 голос
/ 10 декабря 2011

Мои операции создания и удаления работают хорошо. Но функция Edit выдает следующую ошибку: - Оператор сохранения, вставки или удаления затронул неожиданное количество строк (0). Объекты могут быть изменены или удалены с момента загрузки объектов. Обновите записи ObjectStateManager.

ПРИМЕЧАНИЕ: - CatPicView - это модель представления, объединяющая две сущности Category и Picture

Ниже приведен код моего кода действия для редактирования: -

[HttpPost]
public ActionResult Edit(CatPicView catPic)
{
    if (ModelState.IsValid)
    {
        if (!String.IsNullOrEmpty(catPic.Picture.PictureUrl))
        {
            if (catPic.Category.PictureId == null)
            {
                Picture picture = new Picture();
                picture.PictureUrl = catPic.Picture.PictureUrl;
                db.Pictures.Add(picture);
                catPic.Category.PictureId = picture.Id;
            }
            else
            {
                db.Entry(catPic.Picture).State = EntityState.Modified;
            }
        }
        db.Entry(catPic.Category).State = EntityState.Modified;
        db.SaveChanges();
        return RedirectToAction("Index");
    }
    ViewBag.ParentCategoryId = new SelectList(db.Categories, "Id", "Name", catPic.Category.ParentCategoryId);
    return View(catPic);
}

Ответы [ 2 ]

5 голосов
/ 10 декабря 2011

Используя отладчик, проверьте свойства объекта, который вы пытаетесь обновить.Скорее всего, у вас есть идентификатор в null.

Чтобы исправить это, вы должны поместить скрытое поле, содержащее идентификатор измененного объекта, чтобы при публикации формы он отображался на ваш объект.

0 голосов
/ 10 апреля 2015

Вы используете идентификатор, который не существует в текущем контексте, который является picture.Id.В то время, когда вы используете его, идентификатор еще не был сгенерирован, добавьте db.SaveChanges, прежде чем пытаться использовать этот идентификатор.

if (catPic.Category.PictureId == null)
{
    Picture picture = new Picture();
    picture.PictureUrl = catPic.Picture.PictureUrl;
    db.Pictures.Add(picture);
    db.SaveChanges();
    catPic.Category.PictureId = picture.Id;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...