Связывание родительских и дочерних данных в DataGrid в сервисах ria для silverlight 4 - PullRequest
0 голосов
/ 27 сентября 2010

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

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

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

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

эта строка работает нормально:

<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 Ответ

0 голосов
/ 29 сентября 2010

Чтобы информация о городе была доступна при привязке вашей записи Сотрудника, необходимо убедиться, что вы помечаете ссылку на город атрибутом [Включить] в метаданных службы домена 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);

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

...