Хорошо, я потратил на это два дня и теряю уверенность как в себе, так и в Entity Framework. Я вчера опубликовал вопрос, похожий на этот, но так как я не сформулировал его правильно, я не смог полностью решить мою проблему. Вот и снова.
Прежде всего, я пишу приложение Silverlight с использованием RIA Services с Entity Framework. В моей базе данных есть две очень простые таблицы: HeaderTable и DetailsTable. Отношения между ними - 1 ко многим. EDM генерирует свойства для перемещения назад и вперед между этими двумя объектами. Например, в HeaderTable у меня есть свойство DetailTables, которое является коллекцией всех сущностей DetailTalbe для текущей сущности HeaderTable.
Проще говоря, от клиента я хочу вернуть ВСЕ сущности HeaderTable. Я делаю это так:
public void TestFromClient()
{
if (context == null)
{
context = new TestContext();
EntityQuery<HeaderTable> query = context.GetHeaderTablesQuery();
context.Load<HeaderTable>(query);
}
В моем методе обратного вызова я действительно получаю коллекцию для всех элементов HeaderTable. Однако свойство (DetialTables), которое должно содержать все мои подробные записи, пусто. Поскольку эти объекты связаны, я подумал, что получу их во время запроса. Итак, когда я обнаружил, что я не получаю эти объекты, я внес изменения в свой GetHeaderTables () на сервере следующим образом:
public IQueryable<HeaderTable> GetHeaderTables()
{
//return this.ObjectContext.HeaderTable; // Original
return this.ObjectContext.HeaderTable.Include("DetailTables");
}
Теперь это должно явным образом возвращать мои данные в мои заголовки, но точно так же, как и моя первая попытка, к тому времени, когда он доберется до клиента, свойство DetailTalbles в моем свойстве HeaderTable пусто.
В качестве теста я решил посмотреть, что происходит внутри серверной функции GetHeaderTables (), и сделал это, чтобы отладить значение:
public IQueryable<HeaderTable> GetHeaderTables()
{
//return this.ObjectContext.HeaderTable; // Original
//return this.ObjectContext.HeaderTable.Include("DetailTables");
List<HeaderTable> test = this.ObjectContext.HeaderTable.Include("DetailTables").ToList();
}
Конечно, все мои сущности HeaderTable имели допустимое свойство DetailTables с набором всех деталей. Итак, он работает на сервере, но не работает на клиенте. Я явно что-то упускаю, но не могу понять, что. Если кто-то может увидеть, что я делаю неправильно, или посоветовать мне пойти по-другому, я весь слух.
В качестве примечания, я также не могу понять, почему я не могу указать Include () в контексте на стороне клиента. Почему только сервер? Чувак, я потерян!
-Скотт