Таймауты Entity Framework

Я получаю тайм-ауты с использованием Entity Framework (EF) при использовании импорта функции, выполнение которого занимает более 30 секунд. Я пробовал следующее и не смог решить эту проблему:

Я добавил Тайм-аут команды по умолчанию = 300000 в строку подключения в файле App.Config в проекте, который содержит файл EDMX, как предложено здесь .

Вот как выглядит моя строка подключения:


Я попытался установить CommandTimeout в моем репозитории напрямую следующим образом:

private TrekEntities context = new TrekEntities();

public IEnumerable GetKirksFriends()
{
    this.context.CommandTimeout = 180;
    return this.context.GetKirksFriends();
}

Что еще я могу сделать, чтобы получить EF от тайм-аута? Это происходит только для очень больших наборов данных. Все отлично работает с небольшими наборами данных.

Вот одна из получаемых мной ошибок:

System.Data.EntityCommandExecutionException: произошла ошибка при выполнении определения команды. Подробнее см. Внутреннее исключение. ---> System.Data.SqlClient.SqlException: истекло время ожидания. Время ожидания истекло до завершения операции или сервер не отвечает.


Хорошо, у меня все работает, и то, что произошло, глупо. У меня была строка подключения с Default Command Timeout = 300000 и CommandTimeout, установленная на 180. Когда я удалил Default Command Timeout из строки подключения, это сработало. Итак, ответ состоит в том, чтобы вручную установить CommandTimeout в вашем репозитории для вашего объекта контекста следующим образом:

this.context.CommandTimeout = 180;

Очевидно, установка настроек тайм-аута в строке подключения не влияет на него.

308
задан Community 23 May 2017 в 01:55
поделиться