Проблема с доменными службами в Silverlight - PullRequest
1 голос
/ 22 марта 2011

У меня есть следующий код в приложении служб Silverlight RIA WCF:

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    EmployeesService2 context = new EmployeesService2();
    EntityQuery<Employee> query = context.GetEmployeeQuery();
    context.Load(query);
    int count = context.Employees.Count();
    EmployeeGrid.ItemsSource = context.Employees;
}

Заполняет сетку предметами, но context.Employees.Count() = 0. Почему это так?

Другая проблема заключается в том, что у меня есть похожий код для другой страницы в отношении другой службы домена, которая на основе другой модели сущности и базы данных. Но в этом случае служба не возвращала никаких объектов. Какова может быть возможная причина для этого? База данных не пуста.

Ответы [ 4 ]

4 голосов
/ 22 марта 2011

Вероятно, это связано с тем, что context.load все еще загружается в тот момент, когда вы запрашиваете количество его элементов.

Попробуйте это

var operation = context.Load(query);
operation.Completed += (s,ea) => 
{
    int count = operation.Entities.Count();
    EmployeeGrid.ItemsSource = operation.Entities.ToList();
}
3 голосов
/ 22 марта 2011

context.Load (запрос) является асинхронной операцией.Он возвращается немедленно, прежде чем сетевой запрос изнутри извлечет данные.Вам необходимо прослушать событие завершения операции, как указано в ответе Левисаксоса.

Если вы подключили событие operation.Completed и по-прежнему не видите никаких данных в контексте, то пришло время обратить ваше вниманиек службе домена на стороне сервера.Установите точку останова в методе доменной службы, соответствующем GetEmployeeQuery (возможно, GetEmployee), и убедитесь, что он вызывается.Затем установите точку останова в свойстве коллекции сущностей в вашей модели - возможно, в mymodel.Designer.cs, свойство ObjectSet Employees, чтобы увидеть, какие данные в действительности извлекаются.

1 голос
/ 22 марта 2011

Задница, о которой упоминали другие, это потому, что Load является асинхронным и немедленно возвращается без каких-либо данных.Вам необходимо ответить на событие «Завершить операцию загрузки».

Вы можете сделать это, как сказал @Levisaxos, и обработать событие Completed, или вы можете передать обратный вызов в качестве параметра для Load.Затем этот обратный вызов будет выполнен, когда операция загрузки будет завершена.

Подключение к событию, как сказал @Levisaxos, должно работать, но вы должны не забыть отписаться от события еще раз, иначе произойдет утечка памяти.

http://forums.silverlight.net/forums/p/129624/296266.aspx

0 голосов
/ 22 марта 2011

Одна из возможностей заключается в том, что ваша служба не настроена на включение таблицы Employee в возвращаемые данные. Для этого просто добавьте атрибут [Include] в файл метаданных в свойстве Employees сотрудника (если это то, что происходит).

...