Связывание родительских и дочерних данных в DataGrid в сервисах ria для silverlight 4

Я начал изучать услуги Silverlight 4 RIA. Я прошел много примеров того, как привязать данные к сетке. но всегда связанный объект является простым без дочерних таблиц.

в моей БД есть таблица для сотрудников и таблица для названий городов (с полем id как pk). в таблице сотрудников есть FK в поле CityId.

первое, что я попытался сделать, это показать список сотрудников и их название города. это я сделал обычным способом, показанным во всех уроках (создание edmx, создание службы домена и использование окна источника данных для создания сетки данных)

проблемы начались, когда я попытался связать название города, бросить FK между сотрудником (родительская сущность) и citytypes (дочерняя сущность)

эта строка отлично работает:

<sdk:DataGridTextColumn x:Name="cityCodeColumn" Binding="{Binding Path=CityCode}" Header="CityCode" Width="SizeToHeader" />

эта строка не:

<sdk:DataGridTextColumn x:Name="cityNameColumn" Binding="{Binding Path=CityType.Name}" Header="CityName" Width="SizeToHeader" />

после прочтения я понял, что служба домена не передает только данные объекта, выбранного командой LINQ, и не передает информацию дочерних объектов. если только не использовать атрибут include.

Итак, мой вопрос, есть ли шаблон построения приложения Silverlight без подписи всех ассоциаций между сущностями, как включены?

спасибо орен

1 ответ

Чтобы информация о городе была доступна при привязке вашей записи Сотрудника, необходимо убедиться, что вы помечаете ссылку на город атрибутом [Включить] в метаданных службы домена RIA.

  [MetadataTypeAttribute(typeof(MyTestObject.MyTestObject_Metadata))]
  public partial class MyTestObject
  {

    internal sealed class MyTestObject_Metadata
    {
      // Metadata classes are not meant to be instantiated.
      private MyTestObject_Metadata()
      { }

      [Include]
      public AnotherObject Foo { get; set; }
    }
}

Вы также должны включить ссылки в свой запрос.

var results = this.ObjectContext.MyTestObject.Include(Foo);

Надеюсь это поможет.

Другие вопросы по тегам