2011-11-14 4 views
0

첨부되지 않았 음을 확신하지만 ObjectContext에 개체를 추가 할 수 없습니다. 다른 컨텍스트EF4는 첨부되지 않았다고 확신하더라도 컨텍스트에 개체를 추가 할 수 없습니다.

나는 POCO 개체와 함께 EF 4를 사용하고 있습니다. 내가

_currentContext.ObjectStateManager.GetObjectStateEntry(entityIn) 

을하려고하면

그럼 내가 거기 아니다 충분

The ObjectStateManager does not contain an ObjectStateEntry with a reference to an object of type 'System.Data.Entity.DynamicProxies.OrderItem_7D361CB49D75AA90681B4BA3F924139ECB0FC1426E38E90C7B884A4E9CD777DF'. 

박람회 오류가 발생합니다. 나는 둘 다 오류를 받고있을 수 있습니다 어떻게 첨부하려고하면 그래서

_currentContext.AttachTo("OrderItems", entityIn) 

은 그 때 나는

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

를 얻을. 그들은 모순되지 않습니까 ?? 컨텍스트에 어떻게 첨부 할 수 있습니까?

편집

응용 프로그램 전반에 걸쳐 하나의 맥락이있다. 패턴은

  1. 리포지토리 개체를 통한 모든 호출입니다.
  2. 개체는 해당 개체 컨텍스트를 팩토리 클래스에서 가져옵니다.
  3. 이 공장 클래스는 컨텍스트를 만들거나 그래서 당신이 문맥의 두 인스턴스 생성을 경우 해시 코드를 객체를 어떤 시점에서 페이지 수명주기

에 사용되는 하나의 문맥을 보장 요청 오브젝트로부터 문맥을 취득하거나 각각은 동일합니다.

+1

OrderItem을 참조 (예 : 다른 엔터티)하거나 동일한 키가있는 Order가 이미 첨부되어 있습니까? 그러면 다음과 같은 문제가 발생할 수 있습니다. http://stackoverflow.com/questions/7938728/objectstatemanager-trygetobjectstateentry-returns-false-for-attached-object/7938909#7938909 – Slauma

+0

Order @Slauma와 잘 어울립니다. 내 스키마 (농담)를 본 적이 있니? 아마도 고마워. 그러나 기본 주문이 이미 첨부되어이 문제를 일으키는 경우 어떻게 주문 항목을 첨부 할 수 있습니까? 나는 명백한 무엇인가 놓치고있는 I 'm 다? –

+0

첨부 된 Order가 OrderItem에서 참조하는 Order와 동일한 오브젝트이면 문제가되지 않습니다. 그러나이 오류는 연결된 주문 (해시 = x, 키 = 1)과 같은 키 (해시 = y, 키 = 1)를 가진 다른 주문 개체가 있음을 나타냅니다. 이것을 가지고 있다면, 접속 된 Order에 의해 분리 된 Order (OrderItem에 의해 참조 됨)를 대체하거나 첨부하기 전에 OrderItem에서 Order 로의 참조를 널 (null)로 설정해야합니다. 제 추측도 틀릴 수도 있습니다. IEntityChangeTracker의 여러 인스턴스에 대한이 오류가 제 링크 된 대답과 같은 이유인지는 잘 모르겠습니다. – Slauma

답변

2

개체 인 entityIn에는 다른 컨텍스트에있는 개체에 대한 참조가있을 수 있습니다.

그러나 여기서 실제 문제는 범위 에 여러 문맥이있는 것입니다. 그게 바로 할 하드입니다. 웹 응용 프로그램에서는 요청 당 기간이 하나씩 있어야합니다.

+2

나는 모든 리포지토리에 요청 당 단일 컨텍스트를 제공하기 위해 Ninject를 사용합니다. 매력처럼 작동합니다. 모든 IoC 컨테이너가 작업을 수행해야합니다. –

+0

@Craig Stuntz에게 당신의 의견을 보내 주셔서 감사합니다. 응용 프로그램에는 제안한대로 요청 개체와 관련된 컨텍스트가 하나만 있습니다. 나는 이것을 명확하게하기 위해 질문을 편집했습니다. –

+0

"여러 인스턴스의 IEntityChangeTracker"오류가 발생하면 ** 여러 문맥이 포함됩니다. * 마침표. *이 오류는 다른 의미는 아닙니다. 그것을 일으키는 유일한 것이 있습니다. 다른 컨텍스트에있는 객체가 'entityIn'이 아니라는 것입니다. 그것은'entityIn'이 연관되어있는 어떤 객체입니다. –