OpenAccessDomainService执行OQL查询的速度非常慢



我在OpenAccessDomainService中的OQL查询有大问题。

我有一个带有Silverlight客户端和RIA Web Service(OpenAccessDomainService)的应用程序,我需要实现延迟加载方法。

例如,我创建了方法getAnimalsLazy(string stringQuery,int range,int page),在这里我可以从过滤器、每页记录和页面传递stringQuery。这种方法效果很好,但速度非常慢。

为了进行比较,我创建了getAnimals()方法,它非常快,在大约4秒内加载了15000条记录。当我运行getAnimalsLazy时,它在大约2秒内加载了25条记录。

我不知道我做错了什么,有人能帮帮我吗?

这是示例代码:

[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;
    }
}

当我用这个重构getAnimalsLazy时,我找到了问题的解决方案。ExecuteQuery(queryString)一切正常。

string stringQuery = "SELECT * FROM animals AS r WHERE true ORDER BY r.id ASC LIMIT 25 OFFSET 0";
return this.DataContext.ExecuteQuery<Animals>(stringQuery).AsQueryable();

相关内容

  • 没有找到相关文章

最新更新