2012-06-07 2 views
0

Проект, который я использую, основан на стандартном «бизнес-приложении Silverlight».Пользовательская проблема DomainDataSource/Table view в службах RIA

У меня есть несколько таблиц, которые могут отображаться отлично, но я ищу для отображения составной таблицы на основе SQL-соединений из других таблиц. Так, в моем Model.Designer.cs У меня есть небольшой фиктивный класс:

 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 я создаю мой запрос:

 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; 
    } 

В Silverlight приложения получить доступ ко всем этому через DomainDataSource:

  <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> 

и отображать результаты в DataGrid:

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

ничто ракеты науки - проблема в том, что я могу получить только одну запись для отображения в 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]. Это уменьшает количество данных, которые должны быть отправлены по проводу, когда одна запись существует как ребенок для многих родителей. Два «разных» объекта с одним и тем же ключом рассматриваются как один неизменяемый объект, основанный на ключе. Добавляя атрибут '[Key]' к каждому из членов, которые делают запись уникальной, вам удалось определить, как две разные записи фактически разные. –

+0

большое спасибо Ed! –