Обновление ASP.NET MVC 3, ObjectStateManager, параллелизм - PullRequest
0 голосов
/ 28 декабря 2011

Я пытаюсь изменить модель из View, а затем обновить базу данных, используя эту модель.Мой код можно увидеть ниже:

public ActionResult Edit(Saving saving)
    {
        if (ModelState.IsValid)
        {
            Int32[] ids = saving.CatIds.Split(',').Select(n => Convert.ToInt32(n)).ToArray();
            foreach (var category in db.Category.Where(m => ids.Contains(m.id)).ToList())
                saving.Category.Add(category);
            db.ObjectStateManager.ChangeObjectState(saving, EntityState.Modified);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        return View(saving);
    }

мой код выдает эту ошибку:

Объект не может быть присоединен, поскольку он уже находится в контексте объекта.Объект может быть повторно присоединен только в том случае, если он находится в неизменном состоянии.

и если я попробую этот код:

public ActionResult Edit(Saving saving)
    {
        if (ModelState.IsValid)
        {
            Int32[] ids = saving.CatIds.Split(',').Select(n => Convert.ToInt32(n)).ToArray();
            foreach (var category in db.Category.Where(m => ids.Contains(m.id)).ToList())
                saving.Category.Add(category);
            db.ObjectStateManager.ChangeObjectState(saving, EntityState.Unchanged); 
            db.Saving.Attach(saving);
            db.ObjectStateManager.ChangeObjectState(saving, EntityState.Modified);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        return View(saving);
    }

Я получаю ошибку ниже:

Нарушение ограничения PRIMARY KEY 'PK_ProductCategory_1'.Невозможно вставить дубликат ключа в объект 'dbo.ProductCategory'.

Я не знаю, что делать и как его решить.Любая помощь будет оценена.Спасибо

1 Ответ

0 голосов
/ 28 декабря 2011

Вы пытались просто присоединить его, а затем изменить свойства?

if (ModelState.IsValid)
{
    db.Saving.Attach(saving);

    Int32[] ids = saving.CatIds.Split(',').Select(n => Convert.ToInt32(n)).ToArray();
    foreach (var category in db.Category.Where(m => ids.Contains(m.id)).ToList())
        saving.Category.Add(category);
    db.SaveChanges();

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...