Как установить время ожидания команды в 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.