2011-03-02 4 views
0

임에 geting 예외가 동일한 키

An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key. 

내가 분리되어 법인을 가지고 있고 또한 ObjectStateManager에서 키가와 개체를 처리하는 데 도움이 필요, 이것은 내가 이해 해달라고 것입니다. 이게 어떻게 가능할까요?

내가하려는 것은 클라이언트 (Asp MVC 컨트롤러)에서 돌아 왔을 때 엔티티를 컨텍스트에 다시 연결하는 것입니다. 나는이

db.MyEntity.Attach(myEntity); 

을 할 경우

는 내가 처음 예외가.

은 내가

db.MyEntity.Context.LoadProperty(myEntity, e => e.myProperty); 

내 개체가 분리되어 excetion를 얻을를 호출 할 때 때문에이 분리되는 것을 알고있다 (그것이 있어야하는 이유를 ObjectStateManager의 핵심은?).

그래서 요약하면 ObjectStateManager에 키가 있고 분리 된 엔티티가 있다고 생각합니다. 첨부하려면 어떻게해야합니까? 내가 뭘 놓친거야? 또는 나는 그들을 오해하고 있는가?

주셔서 감사합니다.

편집 : as @ Ladislav Mrnka corectly 내 문제는 한 요청 처리에서 동일한 ID로 엔티티를로드하는 것입니다. 내가 비교를 위해 엔티티의 원래 값을 원하기 때문에 이것을 수행하고 문제가있는 경우이를 사용자에게 다시 표시하고 싶지만 ObjectStateManager에 이전 값이 여전히있는 엔티티가 있기 때문에 문제가 발생합니다. lazy Loaded 속성을 표시해야하기 때문에이 엔티티를 첨부합니다. 이것을하기위한 올바른 방법은 무엇입니까? 엔티티에 대한 새로운 쿼리를 만드시겠습니까?

+1

각 요청 처리에 대해 새 컨텍스트를 생성합니까? Attach를 한번만 부르니? 동일한 요청 처리에서 동일한 ID를 가진 엔티티를로드 했습니까? –

+0

요청 당 새로운 컨텍스트를 만듭니다. 나는 단 한 번만 붙이 겠지만 당신이 옳다. 동일한 요구에 같은 ID로 엔티티를 로딩하는 중! (그것은 문제 일 수있다!) – Eduard

답변

2

동일한 ID로 엔티티를로드하고 엔티티를 첨부 할 수 없습니다. 로드 된 것을 분리하거나 변경 사항을로드 된 것으로 병합해야합니다 (ApplyCurrentValues 메소드 확인).

관련 문제