Как установить время ожидания команды в aspnetcore/entityframeworkcore
Место, где установлен тайм-аут команды, больше не совпадает с предыдущими версиями.
Тем не менее, я не могу найти нигде, где говорится, как это изменить.
Я загружаю очень большие файлы, для сохранения которых требуется больше времени, чем 30 секунд по умолчанию.
Обратите внимание, что я спрашиваю о времени ожидания команды, а не времени ожидания миграции, как в другом вопросе.
Ответы
Ответ 1
Если вы используете контейнер DI для управления DbContext (т.е. Вы добавляете DbContext в коллекцию сервисов), время ожидания команды можно указать в параметрах.
В Startup.ConfigureServices:
services.AddDbContext<YourDbContext>(options => options.UseSqlServer(
this.Configuration.GetConnectionString("YourConnectionString"),
sqlServerOptions => sqlServerOptions.CommandTimeout(60))
);
Ответ 2
вы можете изменить его в своем контексте
public class ApplicationDbContext : DbContext
{
public ApplicationDbContext()
{
Database.SetCommandTimeout(150000);
}
}
Ответ 3
Лучше всего использовать CommandTimeout
во время настройки контекста, например:
public class DbConnect: IConnnectDb
{
private dbentitient _context;
// inject this to a db entity from constructor.
//inside each method now use the follow before u actually run the query to db.
_context.Database.SetCommandTimeout(400);
}
Примечание. EF Core будет выполнять запрос только с временем менее 100 секунд. Если это больше, чем это, оно продолжает повторяться, и вы никогда не увидите результат.
Это мой опыт на данный момент, так что дайте мне знать, если вы сможете это исправить, EF Core 1.0 делает тайм-аут даже быстрее, чем EF Core 2.0.