web-dev-qa-db-ja.com

Linq-to-SQLタイムアウト

ページの1つで、linqクエリに時間がかかりすぎてタイムアウトになったというエラーを受け取りました。ページが使用できなくなります。

これはレポートページであり、管理者は1日に1回しかアクセスできません。このクエリを完全に削除することは避けられません。大量のデータを並べ替えるだけです。

私が読んだこれを解決する解決策は、データコンテキストのタイムアウトプロパティを増やすことですが、Webサイト全体でタイムアウトプロパティが変更されるため、それを避けたいと思います。

個々のページに長いタイムアウトを設定する方法はありますか?

44
Tom Gullen

インテリセンスで遊ぶ答えを見つけました:

using (MainContext db = new MainContext())
{
    db.CommandTimeout = 3 * 60; // 3 Mins
}

これは、接続文字列またはデータコンテキストを変更することを想定して、クエリごとにクエリのタイムアウトを増やす方法です。

68
Tom Gullen

@Tom Gullensの回答は、EF6

DbContextのデータベースにドリルダウンする必要がありました

Ecom.Database.CommandTimeout = 120;

これで時間を節約できることを願っています。

10

トム・ガレンの答えは良いものです。

別の回答者は、接続文字列で接続タイムアウトを設定すると述べました。
接続文字列の接続タイムアウトプロパティがコマンドタイムアウトではないことに注意したいです。あなたがそれについて考えるとき、それはより明白です。これはよくある間違いです。

4
Larry Smith

.Net 4.5の最新の構文は次のとおりです。

    MyDbContext context = new MyDbContext();
    context.Database.SetCommandTimeout(300);
2
ZaneDarken

SQLタイムアウトを増やす前に、インデックス作成戦略を評価する価値が常にあります。私の経験では、適切にインデックス付けされたテーブルと列に対するクエリがタイムアウトすることはまれです。

デオーウェン

0
Des Owen