2010-08-17 5 views
1

오류 : ObjectContext 인스턴스가 삭제되어 더 이상 연결이 필요한 작업에 사용할 수 없습니다.Entity Framework 오류가있는 WCF

Entity Framework (VS 2010, .NET 4)를 사용하여 WCF 서비스를 만들려고합니다. 그것을 실행할 때 위의 오류가 발생합니다.

은 내가 T4 템플릿을 편집에 대한 뭔가를 읽을 수 있지만 이미

[DataContractAttribute(IsReference=true)] 
public partial class Person : EntityObject 

[DataMemberAttribute()] 
     public global::System.Int32 ID 
     { 
      get 
      { 
       return _ID; 
      } 

내가 그 차이가 무엇인지 확실하지 않다가 나타납니다
[DataMemberAttribute()] and [DataMember] 

사이

또는

[DataContractAttribute(IsReference=true)] and [DataContract] 

중 하나입니다.

public Person GetPersonByID(int id) 
     { 
      using (var ctx = new MyEntities()) 
      { 
       return (from p in ctx.Person 
         where p.ID == id 
         select p).FirstOrDefault(); 
      } 
     } 

WCF와 EF는 어떻게 함께 제대로 작동합니까?

답변

2

Person 클래스에 탐색 속성이 있습니까? 게으른 로딩을 비활성화 했습니까? 그렇지 않으면 직렬화 중에 탐색 속성의 내용을로드하려고 시도하고 닫힌 컨텍스트 때문에 실패합니다. 다른 질문에 대한

:

[DataMemberAttribute()] 및 [DataMember를] 동일합니다. 그것은 단지 짧은 이름입니다.

[DataContractAttribute (IsReference = true)]와 [DataContract]는 동일하지 않습니다. IsRefrence를 사용하면 탐색 속성에서 순환 참조를 추적 할 수 있습니다. 이 매개 변수가 없으면 순환 참조가 반복을 종료하지 않게됩니다.

+0

Lazy Loading false를 설정하면 작동합니다. WCF가 지연로드로 IEnumerables를 처리 할 수 ​​없다고 가정해야합니까? 대용량 데이터 세트 (수십만 건의 레코드)를 다루는 방법은 무엇입니까? 항상 하위 집합으로 필터링합니까? –

+0

최선의 방법은 필요한 부분 만 전송하는 것입니다. IEnumerable 을 사용하여 작업을 정의 할 수 있다고 생각합니다. 클라이언트 사이트에서 배열로 처리됩니다. –

+0

지연로드가 문제였습니다. WCF로 대규모 데이터 세트를 처리하는 방법에 대해 더 자세히 읽어야합니다. –