2013-06-29 29 views
0

我已经写了更新的方法,下面给出:Enitity框架4更新

public CANDIDATE UpdateCandidateDetails(CANDIDATE objCandidate) 
     { 
      using (var context = new URMSNEWEntities()) 
      { 

       context.CANDIDATES.Attach(objCandidate); 
       context.ObjectStateManager.ChangeObjectState(objCandidate, System.Data.EntityState.Modified); 
       context.SaveChanges(); 
       return objCandidate; 
      } 
     } 

但更新它给follwing错误时:的实体对象不能由IEntityChangeTracker的多个实例被引用。

我已经尝试了谷歌,但我还没有找到一个解决办法。

+0

'objCandidate'附加到另一个上下文中。 –

+0

如何检查? – amitabha

回答

0

随着格特在错误是告诉你,你的对象objCandidate的评论中提到,已经被另一个上下文跟踪。

你不能将一个已经连接的对象,也不应该要,因为这两个环境都极有可能会是处于冲突状态,等等。

从理论上讲,你可以从上下文Detach你的对象与其当前属于,但是这可能会导致额外的复杂性。

要追踪对象所在的位置(以及它所连接的上下文),您必须查看代码以查看创建(或附加)您的代码的位置,会出现另一个上下文已经被实例化,你从中获得了objCandidate对象。

解决该问题的最佳解决方案将可能涉及共享一个共同的背景下整个应用程序的某些部分。

在此网站上搜索UnitOfWorkRepository模式,以获取有关如何管理您的上下文的一些出色信息/建议。例如entity framework + repository + unit or work question

祝你好运。