2013-02-06 3 views
3

EF를 ORM으로 사용합니다.IEntityChangeTracker의 여러 인스턴스에서 엔티티 개체를 참조 할 수 없습니다.

모든 요청마다 objectContext을 처리합니다.

내 서비스가 많은 트래픽을 받기 때문에 엔터티를 캐시 계층에 저장합니다.

때로는 캐시에서 가져온 일부 엔티티에 대해 objectContext already disposed 오류가 발생합니다.

나는 캐시

if (maMDBEntities.Entry(group).State == EntityState.Detached) 
{ 
    maMDBEntities.Groups.Attach(group); 
} 

에서 자궁강 된 요소에이 코드를 추가했지만 지금은 가끔이 오류를 얻을 :

An entity object cannot be referenced by multiple instances of IEntityChangeTracker.

Attach() 처음부터 잘못된 솔루션을 사용 했습니까?

답변

4

다른 질문 (will EF::attach(entity) will solve objectContext is already desposed?)에서 말씀 드렸듯이 다른 Context에 연결하기 전에 엔티티를 분리해야합니다!

maMDBEntities이 새 컨텍스트 (데이터를로드 한 컨텍스트가 아닌) 인 경우 EntityState는이 컨텍스트 관점에서 "연결"되지 않습니다. 따라서 수표로 충분하지 않습니다.

maMDBEntities.Entry(group).State == EntityState.Detached항상은 Entity를로드하지 않은 Context에 해당됩니다.

+0

왜 내 수표로 충분하지 않습니까? –

+0

왜냐하면 :'엔티티 객체는 IEntityChangeTracker의 다중 인스턴스에 의해 참조 될 수 없습니다. '당신은 거기서 깨끗한 작업을하고 있지 않습니다. 분리하면 괜찮습니다. – TGlatzer

+0

그래서 내 수표가 무의미합니다. 내가 참조. 그래서 내가해야 할 일을 정리하면 : 1) EnableProxy = false 2) 모든 엔티티 참조를 'Include()'하여 열심히로드하십시오. 3) 엔티티 참조를 모두 분리 하시겠습니까? 나는 무엇인가 놓치고 있거나 어떤 단계 redudant인가? –

관련 문제