2012-01-27 1 views
0

WCF RIA Service는 항상 강력한 형식, 즉 IEnumerable IQueryable을 반환합니다. 이제 우리의 시나리오가 각각 데이터 그리드를 포함하는 클라이언트 측에서 여섯 개 창은이 모든 데이터 그리드가WCF RIA 서비스를 통해 익명 형식을 반환하거나 동적 처리 w

Product 
    | 
    |-Orders 
     |   
     |- and so on 

것은 즉, 세 개의 계층 구조가 포함되어 있다는 것은 우리가 데이터베이스 스키마를 특정 테이블이 및 세부 사항이 있다는 것입니다

테이블 이름 PanesInfo을 다음과 같이 마찬가지로 그들이 레벨 2를 정의하고이 테이블은 이제 사용자가 처음 쿼리에 관한 정보를 얻기 위해이 테이블을해야합니다 모든 창에 대한 정보가 포함됩니다

ID PaneName TableName TableColomn  Level Type 
1 PaneOne Products ProductID  1 
2 PaneOne Products ProductName  1 
3 PaneOne  Orders OrderID   2 
4 PaneOne  Orders OrderName  2 
5 PaneONE  Orders ORderRef   2 

무엇 레벨 1의 데이터 그리드에 표시되어야합니다. 레벨 1 레벨 2와 레벨 3 등등 (부모 자식 관계) 이들 레벨 간의 연관성도 여기에서 언급 할 것입니다. 이후로 어떻게 논의되어야하는지 확실하지 않습니다. 클라이언트 지금 우리는 많은 해결책을 시도했다 (예를 들면. xml 파싱)이 데이터베이스는 매우 무거 우므로 서버 측에서 반복 횟수가 적은 솔루션을 제안하십시오.

답변

0

IMO 당신은 데이터 측면에서 너무 많은 생각을하고 있으며, 고객 요구 사항을 고려하지 않습니다. 비동기 메소드에 대해서도 생각해 봐야합니다. 즉, 화면이 업데이트되는 동안 물건이 발생할 수 있습니다. 화면이 고객에게 좋기 전에 제품의 첫 번째 그리드를 채워야합니다. 제품을 선택한다는 것은 주문서 등을 체인을 따라 작성해야한다는 것을 의미합니다.

첫 번째 쿼리는 제품 만 검색하면됩니다. 제품이 고객에게 도착하면 첫 번째 제품을 잡고 해당 제품에 대한 추가 정보를 DB에 요청하십시오. UI를 새로 고치려면 UI 속성을 올리십시오. 제품 그리드가 새로 고침되는 동안 DB 요청은 하나의 제품 (예 : 주문)에 대한 추가 정보를 수집하기 위해 사용 중지되었습니다. 그것 (주문)이 도착하면, 그것은 다른 그리드를 채울 것입니다. 사용자에게, 모든 데이터가 동시에 도착할 것처럼 보입니다. (제품 격자에 바인딩하는 데 시간이 걸립니다.)

고객이 다른 제품을 클릭 할 때마다 돌아 가야합니다. 해당 데이터를 얻으려면 DB에. 클라이언트가 이전에 클릭 한 제품을 클릭하면 해당 제품 데이터가 이미 클라이언트 측에 있고 db 여행을 할 필요가 없다는 것을 기억하십시오. 당신이 DB에 갈지 결정하는 방법은 당신이 구현해야만하는 논리입니다.

데이터를 두 번 이상 요청하면 RIA는 DB에서 수신 한 데이터를 클라이언트 측 모델로 병합하여 처리합니다. 기본 모드는 클라이언트 측에서 변경된 데이터를 대체하지 않습니다. 또한 데이터가 클라이언트 측에서 이미 종료 된 경우 데이터를 무시합니다. 즉, db 여행을 아무 것도하지 않았 음을 의미합니다.

클라이언트 서버가 아닙니다. 서버에서 클라이언트로 데이터를 전송하고 있습니다. 클라이언트 측 모델과 서버 측 클라이언트/서버 모델 (EF 부분)이 있습니다. RIA 서비스는 데이터 전송을 관리 할뿐만 아니라 서버 측에있는 모델과 동일한 클라이언트 측 모델을 제공합니다.

HTH, 리처드

0

나는 문제는 조금 너무 모호 보라 단지 정보 솔루션을 정의하는 것은 불가능하다.
그러나 IncludeAttribute를 살펴보면 클라이언트 라운드 트립을 줄여 개체 그래프를 직렬화 할 수 있습니다.
물론, 데이터 클라이언트를 많이 사용하고 있다는 뜻입니다.하지만 다른 주제입니다.