0

OpenAccessDomainServiceのOQLクエリに大きな問題があります。OpenAccessDomainService OQLクエリの実行が非常に遅い

私はSilverlightクライアントとRIA Webサービス(OpenAccessDomainService)とのアプリケーションを持っており、遅延読み込みアプローチを実装する必要があります。

たとえば、getAnimalsLazy(string stringQuery、int range、int page)というメソッドを作成しました。ここでは、フィルタ、ページごとのレコード、およびページからstringQueryを渡すことができます。このメソッドは正常に動作しますが、劇的に遅くなります。

これを比較するには、非常に高速なメソッドgetAnimals()を作成しました。これは〜4秒で15 000レコードをロードしています。 getAnimalsLazyを実行すると、〜2秒で25レコードがロードされます。

私は何が間違っているのか分からない、誰かが私を助けることができる。

これはサンプルコードです:私はthis.DataContext.ExecuteQueryとgetAnimalsLazy(のqueryString)すべてが正常に動作をリファクタリングするとき

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

答えて

0

私は私の問題の解決策を見つけました。

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(); 
関連する問題