Связывание родительских и дочерних данных в 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);
Надеюсь это поможет.