Я получаю тайм-ауты с использованием Entity Framework (EF) при использовании импорта функций, выполнение которого занимает более 30 секунд. Я попытался следующее и не смог решить эту проблему:
Я добавил Default Command Timeout=300000
строку подключения в файл App.Config в проекте, в котором есть файл EDMX, как предлагается здесь .
Вот как выглядит моя строка подключения:
<add
name="MyEntityConnectionString"
connectionString="metadata=res://*/MyEntities.csdl|res://*/MyEntities.ssdl|
res://*/MyEntities.msl;
provider=System.Data.SqlClient;provider connection string="
Data Source=trekdevbox;Initial Catalog=StarTrekDatabase;
Persist Security Info=True;User ID=JamesTKirk;Password=IsFriendsWithSpock;
MultipleActiveResultSets=True;Default Command Timeout=300000;""
providerName="System.Data.EntityClient" />
Я попытался установить CommandTimeout в моем репозитории, например, так:
private TrekEntities context = new TrekEntities();
public IEnumerable<TrekMatches> 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;
Видимо, установка параметров времени ожидания в строке подключения не влияет на это.
"
в строке.
NONCLUSTERED
индексы для некоторых таблиц, это решило проблему с тайм-аутом для нас.