Asp.net 实体框架上下文的解决方法。刷新错误?

Asp.net 实体框架上下文的解决方法。刷新错误?,asp.net,entity-framework-4,objectcontext,Asp.net,Entity Framework 4,Objectcontext,我在使用EF4和自引用表(实现邻接列表层次结构)时遇到问题。 注意:不是多对多引用,只是一张表上的一对多引用。 尝试使用上下文解决间歇性InvalidOperationException(“…ObjectContext可能处于不一致的状态…”)。由于EF4中存在明显的错误,刷新失败 在前面的帖子中,我从Shimmy的connect.microsoft.com链接中看到,漏洞仍然存在。 有人能推荐一种解决方法吗? 如果数据库和实体框架不同步,您该怎么办? 编辑 更多可能有用的事实: 当我收到Inv

我在使用EF4和自引用表(实现邻接列表层次结构)时遇到问题。
注意:不是多对多引用,只是一张表上的一对多引用。

尝试使用
上下文解决间歇性
InvalidOperationException
(“…ObjectContext可能处于不一致的状态…”)。由于EF4中存在明显的错误,刷新失败

在前面的帖子中,我从Shimmy的connect.microsoft.com链接中看到,漏洞仍然存在。
有人能推荐一种解决方法吗?
如果数据库和实体框架不同步,您该怎么办?

编辑
更多可能有用的事实:

  • 当我收到
    InvalidOperationException
    并且消息说“对数据库的更改已成功提交…”时,它不是真的。他们不是。 我试图将对象的
    ParentId
    从1更改为null(
    ParentId
    类型
    int?
  • 我的对象的
    ParentId
    属性已正确更改为预期值(null)。我调用
    Context.SaveChanges()
    。然后,抛出异常。我检查了数据库,该值未更新。在这种情况下,
    ParentId
    在数据库中仍然是1
  • catch
    中,如果我尝试通过
    myObj=Context.MyObjects.SingleOrDefault(o=>o.Id==Id)
    重新查询对象,则对象的
    ParentId
    保持不变。它不会被(不正确的)数据库值更新
    现在我想,好吧,这看起来很奇怪,但如果我再次保存,db可能会被更正
  • catch
    内部调用后续的
    Context.SaveChanges()
    仍然不会更新数据库。(但这次不会抛出异常。)
  • 如果我对SetParent方法进行新调用,
    myObj=Context.MyObjects.SingleOrDefault(o=>o.Id==Id)

    将对象的
    ParentId
    参数正确填充为1,即数据库中的值
  • 此外,对于giggles,我将对象的
    ParentId
    设置为它自己的Id,而不是null,以表示无父性。这工作正常,不会导致
    无效操作异常
    。但是,由于其他原因,这是一个PITA。例如,对象报告其自身为额外子对象。

    因此,问题是:

    • 尝试设置我的自参考
      int是什么意思?ParentId
      设置为null,是否会导致异常
    • 为什么数据库在异常之前没有得到更新
    • 为什么在
      catch
      中,我不能重新同步
    通过上下文从数据库中重新查询对象


    编辑-响应您的更新,如果您在上下文中提交对象的更改,则会发生错误,使用相同的上下文很可能是问题所在。尝试在catch中重新创建上下文以重新查询和更新,看看是否效果更好。

    Brian,在catch中重新创建上下文似乎是重新同步问题的答案。非常感谢。我仍然不知道问题为什么会首先出现,但至少现在我可以继续我的生活了对象上下文是一个工作单元;它保留了同步到数据库所需的所有更改。因此,在catch中,它可能仍然试图将出错对象推送到数据库中。即使您重新查询,如果先前查询的对象存储在其内部状态,OC也会返回该对象。