2012-06-07 1 views
0

제가 사용하는 프로젝트는 표준 "Silverlight Business Application"을 기반으로합니다.RIA 서비스의 사용자 정의 DomainDataSource/Table보기 문제

표시 할 수있는 테이블 수가 많지만 다른 테이블의 SQL 조인을 기반으로하는 복합 테이블을 표시하려고합니다. 나는이 모든 액세스 실버 라이트 응용 프로그램에서

 public IQueryable<JoinClass> GetJoinClass() 
    { 
     IQueryable<JoinClass> query = from o in this.ObjectContext.TranslatedStrings 
                    where o.LanguagesID == 10 
                    select new JoinClass { LanguagesName = o.Languages.LanguagesName, VersionsName = o.Strings.Versions.VersionsName, StringsName = o.Strings.StringsName, TranslatedStringsValue = o.TranslatedStringsValue }; 

     return query; 
    } 

:

 public class JoinClass 
    { 
     [Key] 
     public string LanguagesName { get; set; } 
     public string VersionsName { get; set; } 
     public string StringsName { get; set; } 
     public string TranslatedStringsValue { get; set; } 
    } 

그런 다음, 내 DomainService.cs에 내 쿼리를 만듭니다 그래서, 내 Model.Designer.cs에서 나는 작은 더미 클래스가

  <riaControls:DomainDataSource Name="joinClass" LoadSize="20" QueryName="GetJoinClass" AutoLoad="True"> 
      <riaControls:DomainDataSource.DomainContext> 
       <ds:LanguageModelDomainContext /> 
      </riaControls:DomainDataSource.DomainContext> 
      <riaControls:DomainDataSource.SortDescriptors> 
       <riaControls:SortDescriptor PropertyPath="LanguagesName"></riaControls:SortDescriptor> 
      </riaControls:DomainDataSource.SortDescriptors> 
     </riaControls:DomainDataSource> 

및 데이터 그리드의 결과 표시 :

<sdk:DataGrid IsReadOnly="True" Name="translatedStringsDataGrid" ItemsSource="{Binding Data, ElementName=joinClass}"> 
를 통해 DomainDataSource

로켓 과학 없음 - 문제는 DataGrid에 표시 할 레코드가 하나 밖에 없다는 것입니다. 쿼리 GetJoinClass()는 정상적으로 실행되어 약 600 개의 레코드를 반환하지만 DataGrid에는 오직 하나만 나타납니다. 내가 사용하는 다른 모든 표준 쿼리에는이 문제가 없습니다.

감사하게받은 모든 포인터!

답변

0

대답 -

[Key]. 클래스의 모든 속성은 [Key] 속성을 가져야합니다.

 public class JoinClass 
    { 
     [Key] 
     public string LanguagesName { get; set; } 
     [Key] 
     public string VersionsName { get; set; } 
     [Key] 
     public string StringsName { get; set; } 
     [Key] 
     public string TranslatedStringsValue { get; set; } 
    } 

나는 이유를 모른다.

+0

데이터가 서버를 떠날 때 모든 데이터 (계층 구조에도 불구하고)는 평평 해지고 인덱스가'[Key]'속성/속성의 값인 "사전"에 저장됩니다. 이렇게하면 하나의 레코드가 많은 부모의 자식으로 존재할 때 전선을 통해 전송해야하는 데이터의 양이 줄어 듭니다. 같은 열쇠를 가지는 2 개의 「다른」객체는, 열쇠에 근거하는 1 개의 불변 객체로서 보여집니다. 레코드를 고유하게 만드는 각 멤버에'[Key]'속성을 추가함으로써 실제로 서로 다른 두 레코드가 어떻게 다른지를 정의하는 데 성공했습니다. –

+0

많은 감사합니다! –