MVC 4 - ObjectStateManager中已存在具有相同键的对象

时间:2014-04-28 00:19:51

标签: asp.net-mvc vb.net entity-framework asp.net-mvc-4

首先 - 道歉。我知道有很多关于此的问题,但我已经搜索了几天,找不到任何能够根据我的情况调整的解决方案(或者调整得过于沉闷)。

基本上,这就是我要完成的任务:显示的代码用于将编辑保存到特定类中的一个项目 - 该功能正常工作。然后,基于该条目的Order属性,我想要更改数据库中的其他项的Order属性。这些更改在For Each声明中进行。

代码中显示的错误正在EntityState.Modified上抛出。我知道错误可能是由For Each语句引起的,因为db项目基本上被调用了两次;但是,我不确定如何解决它。请帮忙。谢谢!

Function Edit(<Bind(Include:="ID,Column,Order,Type,Header,Expandable,Expansion,Instruction")> ByVal checklistitem As ChecklistItem) As ActionResult

For Each x In db.Items
    If checklistitem.Order <= x.Order And checklistitem.Type = x.Type And checklistitem.ID <> x.ID Then
        x.Order += 1
    End If
Next

If ModelState.IsValid Then
    db.Entry(checklistitem).State = EntityState.Modified 'ERROR RETURNED ON THIS LINE: An object with the same key already exists in the ObjectStateManager. The existing object is in the Modified state. An object can only be added to the ObjectStateManager again if it is in the added state.'
    db.SaveChanges()
    Return RedirectToAction("Index")
End If
Return View(checklistitem)

1 个答案:

答案 0 :(得分:1)

你的数据库不是每个请求的实例吗? 当您向您显示编辑表单时,它必须从db读取checklistitem,因此它将附加到db上下文 并且当发布时,由mvc创建一个新的相同的密钥obj,因此它使这个错误 2 obj具有相同的键,附加到1上下文