2010-06-08 1 views
2

하나의 호출에서 여러 개의 작은 LoadOperations를 체인/중첩하지 않고 여러 RIA 엔터티 세트를로드하여 순차적으로로드 할 수 있기를 원합니다.WCF RIA 서비스를 사용하여 여러 LoadOperations에 대한 패턴

여러 개의 페이지에 여러 개의 콤보 박스가 있습니다. 이러한 콤보 박스는 데이터베이스의 정적 값 (예 : 상태 값)으로 채워집니다.

지금은로드하려는 각 유형에 대해 일련의 LoadOperations을 문자열로 묶는 한 가지 방법으로 VM에서이 값을 사전로드합니다. 예를 들면 다음과 같습니다.

public void LoadEnums() { 
     context.Load(context.GetMyStatusValues1Query()).Completed += (s, e) => 
     { 
      this.StatusValues1 = context.StatusValues1; 
      context.Load(context.GetMyStatusValues2()).Completed += (s1, e1) => 
      { 
       this.StatusValues2 = context.StatusValues2; 
       context.Load(context.GetMyStatusValues3Query()).Completed += (s2, e2) => 
       { 
        this.StatusValues3 = context.StatusValues3; 

        (....and so on) 


       }; 
      }; 
     }; 
}; 

이 기능은 정상적으로 작동하지만 다소 불쾌한 것으로 보입니다. 또한 마지막로드 조작이 완료되면이 작업 이후에 작업 할 모든 엔터티를로드 할 수 있으므로 이러한 열거 형 값은 콤보 상자 및 목록 상자와 같은 폼 요소에서 올바르게 해결됩니다. (저는 생각합니다) 델리게이트를 만들지 않고 마지막로드 조작 완료시이를 호출하지 않고서는 쉽게 수행 할 수 없습니다.

그럼 내 질문은 : 거기 밖으로 아무도 사용하는 더 나은 패턴, 이상적으로 어디 하나의 LoadOperation 내 모든 정적 엔티티를로드 할 수 있습니까?

는 그냥 LoadOperations 또 다른 후 하나를 호출하고 도메인 컨텍스트가 호출되는 순서대로 동 기적을 만들 것입니다 :

답변

4

이 대답은 적어도 RIA 서비스 1.0, 매우 간단 것으로 보인다.

내가 두 번째 쿼리는 첫 번째 후 즉시 호출하고 여전히로드 및 "진행 LoadOperation"를 던지는 동안 될 것으로 예상 한 것이기 때문에 나에게 분명하지 않는 것

context.Load(context.GetMyStatusValues1Query()).Completed += (s, e) => 
    { 
    this.StatusValues1 = context.StatusValues1; 
    } 

context.Load(context.GetMyStatusValues2Query()).Completed += (s1, e1) => 
    { 
    this.StatusValues1 = context.StatusValues2; 
    } 

즉, 예외.

내 질문에 예제에서 못생긴 중첩 된 LoadOperation 패턴을 사용하는 유일한 이유는 두 번째 LoadOperation이 첫 번째 결과에 종속되어 있기 때문입니다.

+0

'context.Load'를 동 기적으로 호출하는 방법이 있습니까? – Shimmy

+1

@Shimmy, Silverlight의 모든 RIA 서비스 호출은 비동기입니다. – Custodio

+0

Custodio, 내 질문은 동기로 호출 할 수 있고 현재 스레드를 차단할 수있는 경우입니다. – Shimmy