Убить двух зайцев одним выстрелом в RIA Services с помощью Silverlight - PullRequest
3 голосов
/ 28 сентября 2010

Вот проблема:

База данных сильно нормализована, и один конкретный запрос опирается на множественные отношения в базе данных. Запрос предназначен для объединения всех таблиц, построения всего объекта и затем возврата списка этих объектов.

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

Теперь запрос возвращает только X количество элементов, поскольку он поддерживает разбиение на страницы, но нам также нужно знать общее количество элементов, которые там есть.

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

Параметры вывода / ссылки не работают, и поскольку функция предназначена для возврата IQueryable элементов, я застрял на том, как вернуть этот список элементов, а также на общее количество.

Я уверен, что кто-то сталкивался с этим раньше - есть мысли?

Ответы [ 2 ]

1 голос
/ 28 сентября 2010

Количество соединенных таблиц элементов равно , а не , то же самое, что и возвращение подмножества этих записей. Они просто делятся определенным количеством кода SQL (особенно для объединения таблиц). RIA выполняет фактическую пейджинговую работу на стороне сервера, поэтому вы фактически получаете немного разные запросы для каждого пейджингового вызова.

Операция подсчета также будет работать намного быстрее, чем запрос на запись, поскольку SQL count часто может выполняться только с использованием индексов базы данных (хотя Linq вполне может оптимизировать это для достижения того же конечного результата ... Умный Linq кодеры!).

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

Вам лучше относиться к ним как к двум отдельным функциям (как и вы), и вам не нужны дополнительные затраты на серверный вызов. Всегда есть где-то еще, что вы могли бы сделать больше (кэширование и т. Д.).

В случае сомнений: Не усложняйте процесс ради очень небольшого усиления.

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

Если проблема связана со связью клиент-сервер, вы можете поместить результат подсчета в заголовок ответа результата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...