У меня большая проблема с OQL-запросом в OpenAccessDomainService.OpenAccessDomainService Выполнение OQL-запроса очень медленное
У меня есть приложение с клиентом Silverlight и веб-службой RIA (OpenAccessDomainService), и мне нужно реализовать ленивый подход к загрузке.
Например, я создал метод getAnimalsLazy (string stringQuery, int range, int page), где я могу передать stringQuery из фильтров, записей на страницу и страницу. Эти методы работают отлично, но значительно медленнее.
Для сравнения я создал метод getAnimals(), который так быстр, он загружает 15 000 записей за ~ 4 сек. Когда я запускаю getAnimalsLazy, он загружает 25 записей за ~ 2 сек.
Я не знаю, что я делаю неправильно, может кто-нибудь мне помочь.
Это пример кода:
[EnableClientAccess()]
public partial class ZooDomainService : OpenAccessDomainService<Model.ZooDomainModel>
{
public ZooDomainService() : base()
{
}
/// <param name="stringQuery">eg. AND (r.type = "Elephant" OR r.type = "Monkey") ORDER BY r.id ASC</param>
public IQueryable<Animals> getAnimalsLazy(string stringQuery, int range, int page)
{
stringQuery = "SELECT r FROM AnimalsExtent AS r WHERE true " + stringQuery;
Database db = Database.Get("Connection");
IObjectScope scope = db.GetObjectScope();
Query<Animals> qry = scope.GetOqlQuery<Animals>(stringQuery);
int toSkip = (page - 1) * range;
qry.Skip = toSkip;
qry.MaxResultCount = range;
return qry.ExecuteEnumerable().AsQueryable<Animals>();
}
public IQueryable<Animals> getAnimals()
{
return this.DataContext.Animals;
}
}