Разбираясь с Windows Azure Mobile Service, наткнулся на очень интересный нюанс: при запросе данных с помощью метода IMobileServiceTable<T>.ToListAsync (и других аналогичных методов соответствующего интерфейса) количество возвращаемых записей (по умолчанию) не превышает 50! (Более подробно можно прочитать здесь).
Example:
Если кол-во объектов SomeObject > 50, count все равно будет равен 50
То есть для того, чтобы получить 150 записей, нужно использовать метод IMobileServiceTable<T>.Take и непосредственно указывать нужное количество. А если это количество заранее не известно? К примеру, нужно синхронизировать базу данных в облаке с локальной копией.
Чтобы узнать общее количество записей, потребуется интерфейс ITotalCountProvider, используя который можно получить количество всех записей, возвращаемых запросом.
Однако, это не решает проблему, так как переменная count будет по прежнему равно 50 (хотя TotalCount = 150).
Чтобы решить данную проблему я сделал несколько вспомогательных методов, которые позволяют получить все записи из Mobile Service:
Теперь, используя эти методы расширения, я могу достаточно просто получить список всех записей:
Чтобы узнать общее количество записей, потребуется интерфейс ITotalCountProvider, используя который можно получить количество всех записей, возвращаемых запросом.
Example:
Однако, это не решает проблему, так как переменная count будет по прежнему равно 50 (хотя TotalCount = 150).
Чтобы решить данную проблему я сделал несколько вспомогательных методов, которые позволяют получить все записи из Mobile Service:
MobileServiceTableExtensions.cs:
Теперь, используя эти методы расширения, я могу достаточно просто получить список всех записей:
Example:
Переменная count равна реальному количеству записей
P.S. Пока писал статью, нашел похожий пост на MSDN.
Комментариев нет:
Отправить комментарий