2017-06-29 14 views
0

ストアドプロシージャを非同期で呼び出す方法私は<strong>Entity Frameworkの</strong>を使用して、このようなストアドProcuduresを呼び出しています私の<strong>ASP.NET MVC(C#の)</strong>アプリケーションでは、

public virtual ObjectResult<ART_USP_GetAssetReportGridList_Result> ART_USP_GetAssetReportGridList(string searchExpression, string sortExpression, string sortDirection, Nullable<int> startIndex, Nullable<int> pageSize, ObjectParameter count) 
    { 
     var searchExpressionParameter = searchExpression != null ? 
      new ObjectParameter("SearchExpression", searchExpression) : 
      new ObjectParameter("SearchExpression", typeof(string)); 

     var sortExpressionParameter = sortExpression != null ? 
      new ObjectParameter("SortExpression", sortExpression) : 
      new ObjectParameter("SortExpression", typeof(string)); 

     var sortDirectionParameter = sortDirection != null ? 
      new ObjectParameter("SortDirection", sortDirection) : 
      new ObjectParameter("SortDirection", typeof(string)); 

     var startIndexParameter = startIndex.HasValue ? 
      new ObjectParameter("StartIndex", startIndex) : 
      new ObjectParameter("StartIndex", typeof(int)); 

     var pageSizeParameter = pageSize.HasValue ? 
      new ObjectParameter("PageSize", pageSize) : 
      new ObjectParameter("PageSize", typeof(int)); 

     return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<ART_USP_GetAssetReportGridList_Result>("ART_USP_GetAssetReportGridList", searchExpressionParameter, sortExpressionParameter, sortDirectionParameter, startIndexParameter, pageSizeParameter, count); 
    } 

ここART_USP_GetAssetReportGridListは、ストアドプロシージャの名前です。これは同期呼び出しです。レコードの数が3000を超える場合、この呼び出しによってタイムアウトエラーが発生します。

タイムアウトエラーが発生することなくこの呼び出しを非同期で行う方法はありますか?

+0

いけないSQL往復あたり100の以上の記録(pageSizeを)を許可してみてください。解決策は非同期コールspではなく、すでに持っているページングメカニズムの恩恵を受けることです。 –

+0

レコードをグリッドビューにバインドするときにページングメカニズムが使用されます。しかし、私は輸出にも同じ方法を使っています。そのため、ページサイズは合計レコードになります。その場合、ページサイズでコールを制限することはできません。 – AJIN

答えて

0

特定の操作のタイムアウトを次のように増やすことができます。

((IObjectContextAdapter)this).ObjectContext.CommandTimeout = 180; // in sec 

または、このコードをDbContextコンストラクタに設定します。

+0

ワウ..ワウ..ワウ..チャーム@Houssam Hamdanのように働く。どうもありがとうございました。 – AJIN

0

これを非同期的に呼び出すと違いはありません。コマンドタイムアウトエラーが発生しています。これを避けるために、SQL接続のCommandTimeout設定を増やす必要があります。しかし、私はこれをやっておらず、あなたのストアド・プロシージャの効率を見てみることを強く勧めます.30秒のデフォルト・タイムアウトは、必要以上に長くなければなりません。

+0

タイムアウトは接続文字列ですでに60に設定されています。 – AJIN

0

この

var data = ObjectContext.Database.SqlQuery<ART_USP_GetAssetReportGridList_Result>("ART_USP_GetAssetReportGridList", searchExpressionParameter, sortExpressionParameter, sortDirectionParameter, startIndexParameter, pageSizeParameter, count).FirstOrDefaultAsync(); 
+0

** FirstOrDefaultAsync **は、シーケンス内の最初の要素のみを返します。また、この行には、私のメソッドの構造に応じていくつかのコンパイルエラーがあります。 – AJIN

関連する問題

 関連する問題