0

Таймаут при использовании Linq-to-SQL

9

Я получаю ошибку на одной из страниц, связанная с тем, что запрос LINQ выходит за пределы времени ожидания, так как выполняется слишком долго. Это делает страницу unusable.

Это страница отчетов, к которой обращаются только администраторы около одного раза в день. Сократить этот запрос полностью невозможно, так как ему необходимо обработать большое количество данных.

Я читал, что для решения этой проблемы можно увеличить свойство таймаута в контексте данных, но я бы предпочел избежать этого, так как это изменит настройку для всего сайта.

Существует ли способ установить больший таймаут только для отдельных страниц?

5 ответ(ов)

0

Перед увеличением времени ожидания SQL всегда стоит оценить вашу стратегию индексирования. В моем опыте редко случается, чтобы запрос к хорошо индексированной таблице и столбцу приводил к тайм-ауту.

0

Вот ответ на вопрос, как можно увеличить тайм-аут запроса на отдельной основе:

using (MainContext db = new MainContext())
{
    db.CommandTimeout = 3 * 60; // 3 минуты
}

Таким образом, вы можете увеличить время ожидания для запроса, не изменяя строки подключения или контексты данных. Это особенно полезно, если вам нужно изменить тайм-аут только для конкретного запроса.

0

Ответ @Tom Gullens не сработал для меня в EF6.

Мне пришлось углубиться в базу данных через DbContext:

Ecom.Database.CommandTimeout = 120;

Надеюсь, это сэкономит вам время.

0

Вот актуальный синтаксис для .Net 4.5:

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

Этот код устанавливает таймаут (время ожидания) для выполнения команд базы данных в контексте MyDbContext на 300 секунд. Убедитесь, что таймаут установлен до выполнения каких-либо запросов к базе данных.

0

Ответ Тома Гуллена действительно хороший.

Другой участник упомянул настройку параметра Connect Timeout в строке подключения.

Я хотел бы предостеречь, что параметр таймаута подключения в строке подключения НЕ является таймаутом команды. Это становится более очевидным, когда над этим поразмышлять. Это распространенная ошибка.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь