Подтвердить что ты не робот

Как установить тайм-аут миграции Entity Framework Core?

Я использую последнюю (1.0.0) версию EF Core. У меня есть переход для работы в довольно большой базе данных.

Я запускаю:

Обновление базы данных dotnet ef -c ApplicationDbContext

И получим:

Время ожидания истекло. Период ожидания, прошедший до завершения операция или сервер не отвечает.

В строке подключения я явно устанавливаю таймаут следующим образом:

Время ожидания подключения = 150000

К сожалению, это не помогло. Как мне это сделать?

4b9b3361

Ответ 1

Сообщение об ошибке, которое вы получаете, относится к тайм-ауту Command, а не к таймауту соединения. Невозможно установить CommandTimeout в контексте при использовании команд EF. Но вы можете установить его глобально в конструкторе, а затем удалить позже, если вам не нужно его хранить:

public class ApplicationDbContext : DbContext
{
    public ApplicationDbContext()
    {
        Database.SetCommandTimeout(150000);
    }
}

Ответ 2

Используя Entity Framework 6, я устанавливаю более длительный тайм-аут для миграции с использованием свойства DbMigrationsConfiguration.CommandTimeout.

Вот так:

В моем файле Global.asax.cs:

protected void Application_Start()
{
    DatabaseMigrationConfig.Register();
    //etc
}

Мой DatabaseMigrationConfig Класс:

public class DatabaseMigrationConfig
{
    internal static void Register()
    {
        using (var context = new MyContext(Config.ConnectionStringMigrations))
        {
            Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyContext,
                                        Migrations.Configuration>());
            context.Database.Initialize(false);
        }
    }
}

Мой Migrations.Configuration класс:

using System.Data.Entity.Migrations;

internal sealed class Configuration : DbMigrationsConfiguration<MyContext>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = false;
        AutomaticMigrationDataLossAllowed = false;
        CommandTimeout = 360;// <----- 6 minute timeout!
    }
}

Литература:

Миграции: ошибка таймаута в командах Update-Database DbMigrationsConfiguration.CommandTimeout Свойство

Обратите внимание, что во время миграции я также использую другую строку соединения - у пользователя более высокие разрешения, чем у веб-сайта, и время ожидания соединения больше. См. Этот вопрос - Как использовать другую строку соединения (но такую ​​же базу данных) для переноса

Ответ 3

Вы можете установить тайм-аут для переноса только путем установки таймаута в контексте перед вызовом метода Migrations:

using (var context = new DispatchingDbContext(_configuration))
{
    context.Database.SetCommandTimeout(300);
    await context.Database.MigrateAsync().ConfigureAwait(false);
}

Установить тайм-аут для миграции ef.netcore