Я получаю тайм-ауты с использованием 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
индексы для некоторых таблиц, это решило проблему с тайм-аутом для нас.Ответы:
Существует известная ошибка с указанием времени ожидания команды по умолчанию в строке подключения EF.
http://bugs.mysql.com/bug.php?id=56806
Удалите значение из строки подключения и установите его для самого объекта контекста данных. Это будет работать, если вы удалите конфликтующее значение из строки подключения.
Entity Framework Core 1.0:
Entity Framework 6:
Entity Framework 5:
Entity Framework 4 и ниже:
источник
this.Database.SetCommandTimeout(180);
Если вы используете DbContext, используйте следующий конструктор для установки времени ожидания команды:
источник
DbContext
производный класс был автоматически сгенерирован изedmx
файла?Если вы используете
DbContext
и EF v6 +, в качестве альтернативы вы можете использовать:источник
Обычно я выполняю свои операции в рамках транзакции . Как я понял, недостаточно установить тайм-аут команды контекста, но для транзакции нужен конструктор с параметром тайм-аута. Я должен был установить оба значения тайм-аута для его правильной работы.
В конце функции я установил таймаут команды на предыдущее значение в prevto.
Использование EF6
источник
Я знаю, что это очень старая ветка, но EF не исправил это. Для людей, использующих автоматически сгенерированный
DbContext
может использовать следующий код, чтобы установить время ожидания вручную.источник
Если вы используете Entity Framework, как я, вы должны определить время ожидания в классе запуска следующим образом:
источник
Это то, что я финансировал. Может быть, это кому-то поможет
Итак, поехали:
Если вы используете LINQ с EF, ищите некоторые точные элементы, содержащиеся в списке, например:
все идет хорошо, пока IdList не содержит более одного Id.
Проблема «тайм-аут» возникает, если список содержит только один идентификатор. Для решения проблемы используйте условие if для проверки количества идентификаторов в IdList.
Пример:
Объяснение:
Просто попробуйте использовать Sql Profiler и проверьте оператор Select, сгенерированный Entity frameeork. ...
источник