제가 사용하는 프로젝트는 표준 "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에는 오직 하나만 나타납니다. 내가 사용하는 다른 모든 표준 쿼리에는이 문제가 없습니다.
감사하게받은 모든 포인터!
데이터가 서버를 떠날 때 모든 데이터 (계층 구조에도 불구하고)는 평평 해지고 인덱스가'[Key]'속성/속성의 값인 "사전"에 저장됩니다. 이렇게하면 하나의 레코드가 많은 부모의 자식으로 존재할 때 전선을 통해 전송해야하는 데이터의 양이 줄어 듭니다. 같은 열쇠를 가지는 2 개의 「다른」객체는, 열쇠에 근거하는 1 개의 불변 객체로서 보여집니다. 레코드를 고유하게 만드는 각 멤버에'[Key]'속성을 추가함으로써 실제로 서로 다른 두 레코드가 어떻게 다른지를 정의하는 데 성공했습니다. –
많은 감사합니다! –