2012-08-11 3 views
1

두 테이블 (GroupsItems)이있는 데이터베이스가 있다고 가정 해 보겠습니다. IdName :WCF 서비스에서 데이터 가져 오기

  • Groups는 두 개의 열이 있습니다.
  • Items에는 Id, GroupIdName의 세 열이 있습니다.

보시다시피, GroupsItems 사이에는 일대 다 관계가 있습니다.

WCF 및 LINQ를 사용하여 웹 서비스를 작성하려고합니다. 새 LINQ to SQL 클래스 파일을 추가했으며이 두 테이블을 가져 왔습니다. Visual Studio에서 자동으로 적절한 클래스를 생성했습니다.

그런 다음 모든 서비스가 작동하는지 확인하기 위해 서비스 용 간단한 클라이언트를 만들었습니다. GetAllGroups() 메서드를 호출 한 후 모든 그룹을 Groups 테이블에서 가져옵니다. 그러나 그들의 재산 Items은 항상 null입니다.

내 질문은 - 전체 클래스 (전체 Group 클래스 및 모든 Items 속하는) WCF 강제로 방법이 있나요? 아니면 이것이 행동해야하는 방식입니까?

편집 :이 모든 Groups 반환 WCF 서비스 내부 함수입니다 :

public List<Group> GetAllGroups() 
    { 
     List<Group> groups = (from r in db.Groups select r).ToList(); 

     return groups; 
    } 

내가 확인 한 동안 디버깅 및 GetAllGroups() 함수 내에서 모든 Group 객체는 항목을하지만 이후 클라이언트가이를 수신이 - 모든 Items 특성 null으로 설정됩니다.

+0

@marc_s : 질문을 업데이트했습니다. – xx77aBs

답변

2

대부분의 경우 Linq-to-SQL의 기본 "지연로드"동작이 발생합니다. 당신이 디버그하고 .Items 모음을 보면 - 항목이로드됩니다. 그러나 서비스 코드가 정상적으로 실행될 때는 이런 일이 발생하지 않습니다. ,

public List<Group> GetAllGroups() 
{ 
    // this line should really be where you *instantiate* your "db" context! 
    db.DeferredLoadingEnabled = false; 

    DataLoadOptions dlo = new DataLoadOptions(); 
    dlo.LoadWith<Group>(g => g.Items); 

    db.LoadOptions = dlo; 

    List<Group> groups = (from r in db.Groups select r).ToList(); 

    return groups; 
} 

당신이 Items 컬렉션 지금 채워 마십시오 (자세한 내용은에 대한 참조 Using DataLoadOptions to Control Deferred Loading 또는 LINQ to SQL, Lazy Loading and Prefetching를) : 이런 식으로 뭔가를 시도 -

당신은 그러나 해당 항목의 "열망로드"를 적용 할 수 있습니다 당신이 전화 할 때?

+0

그래, 그게 다야! 감사합니다.) – xx77aBs

+0

어떻게 든로드를 원한다고 지정할 수 있습니까? – xx77aBs

관련 문제