Дочерние данные Silverlight, полученные в запросе, но недоступные в методе OnLoadCompleted - PullRequest
0 голосов
/ 19 октября 2011

У меня есть сервисное приложение Silverlight 4 RIA с классом Sprinkler, у которого есть дочерняя коллекция Depths. Sprinkler и Depth - это две таблицы в базе данных SQL, в которых один Sprinkler имеет много глубин.

Я вызываю запрос из класса, таким образом:

Context.GetRunsForSelectedSprinkler(currentSprinkler.CurrentSprinkler, OnLoadListCompleted, null);

и метод получения доступа к результатам запроса в одном классе:

private void OnLoadListCompleted(InvokeOperation<IEnumerable<Sprinkler>> invOp)
{

   IEnumerable<Sprinkler> testRuns = invOp.Value;

}

Мой запрос в DomainService:

[Invoke]

public IEnumerable<Sprinkler> GetRunsForSelectedSprinkler(string selectedSprinkler)
{

//            this.ObjectContext.ContextOptions.LazyLoadingEnabled = true;

   var sprinklers = (this.ObjectContext.Sprinklers.Include("Depths").Where(c =>  c.Sprinkler1 == selectedSprinkler));

   return sprinklers;

}

Что я нахожу, используя отладку, так это то, что внутри этого запроса GetRunsForSelectedSprinkler коллекция Depths для каждого спринклера в спринклерах заполняется правильно. Однако в методе OnLoadListCompleted, который получает результат этого запроса, хотя данные разбрызгивателя из таблицы Sprinkler есть, дочерняя коллекция Depths, которая была заполнена запросом (из-за Include ("Depths")), теперь не существует. и Глубины - ноль. Каким-то образом эта коллекция глубин была потеряна в процессе возврата.

Кто-нибудь знает, как я могу это исправить?

У меня есть Google, и я думаю, что запрос правильный, но я не могу найти ничего о невозможности возврата дочерней коллекции.

Я пытался добавить [Включить] для коллекции глубин в метаданные, но это не имеет никакого эффекта. Я также попытался установить this.ObjectContext.ContextOptions.LazyLoadingEnabled = true; и нет, но это не имеет никакого эффекта. Запрос выполняется правильно, но результат не возвращается правильно в OnLoadListCompleted, и он как-то теряет связанные дочерние данные.

1 Ответ

0 голосов
/ 20 октября 2011

Если вы продолжаете угадывать правильные ключевые слова, в конце концов, вы можете найти правильный ответ в Google, и теперь я могу ответить на свой вопрос. Я следовал совету на этой странице:

http://silverlightguy.com/2010/07/23/trick-for-solving-wcf-ria-services-issue/

, которая решила мою проблему, и дочерняя коллекция была возвращена правильно.

Кажется, что это известная проблема в службах RIA, даже если ее трудно обнаружить. И я также нашел эту страницу:

Объекты InvokeOperation становятся нулевыми

и попытался сделать мой запрос вместо Invoke, но еще не закончил его таким образом, пока не обнаружил, что вышеуказанный метод работает, поэтому не знаю, работает ли он.

Я также обнаружил, что на этой странице упоминается проблема, но я ее не отслеживал.

Silverlight 4 LoadOperation возвращает ноль

Спасибо тем людям, которые написали выше.

...