Entity framework 4 实体框架4错误:一个实体对象不能被多个IEntityChangeTracker实例引用

Entity framework 4 实体框架4错误:一个实体对象不能被多个IEntityChangeTracker实例引用,entity-framework-4,Entity Framework 4,我第一次使用EF4,并且采用了每个视图使用UnitofWork(DataContext)的策略。然而,我有问题,并寻求建议 我有一个显示工作站列表的窗口,当我单击编辑按钮时,我有另一个显示所选工作站以进行编辑的窗口 列表视图和编辑视图使用它们自己的工作单元,所选工作站被传递到编辑视图,但是当我尝试在编辑视图上保存工作站时,我得到以下信息: 一个实体对象不能被多个IEntityChangeTracker实例引用 我知道这是因为我传递给编辑视图的工作站对象有一个与之关联的数据上下文 我应该如何处理这

我第一次使用EF4,并且采用了每个视图使用UnitofWork(DataContext)的策略。然而,我有问题,并寻求建议

我有一个显示工作站列表的窗口,当我单击编辑按钮时,我有另一个显示所选工作站以进行编辑的窗口

列表视图和编辑视图使用它们自己的工作单元,所选工作站被传递到编辑视图,但是当我尝试在编辑视图上保存工作站时,我得到以下信息:

一个实体对象不能被多个IEntityChangeTracker实例引用

我知道这是因为我传递给编辑视图的工作站对象有一个与之关联的数据上下文

我应该如何处理这个问题???

有三种选择:

  • 编辑视图可以根据另一个视图中实体的主键,从自己的上下文中重新选择工作站
  • 您可以从列表视图中分离工作站,然后将其附加到编辑视图中
  • 如果列表视图为只读,则可以使用
    MergeOption.NoTracking
    来阻止上下文跟踪更改。您仍然需要将其附加到编辑上下文

  • @Craig,尝试分离,但它会导致对象图的其余部分被丢弃。分离,而不是丢弃。不一样。无论如何,对大多数人来说,同时处理多个上下文是不直观的。如果可以避免的话,我不建议这样做。@Craig尝试了选项3,但当我附加到编辑上下文时,我得到了以下异常-ObjectStateManager中已经存在具有相同键的对象。ObjectStateManager无法跟踪具有相同键的多个对象。这意味着您将以某种方式将同一实例附加到编辑上下文两次。你没有显示代码,但事情就是这样。@Craig,在你的分离回答中,我想说的是,如果我分离顶级对象时,有一个对象与另一个对象有关联,那么关联的对象将变为空。这是正确的还是我遗漏了什么??