Выполнить tnet EF с внешним PostGres не удается выполнить миграцию, потому что база данных не готова - PullRequest
1 голос
/ 29 мая 2020

У меня есть веб-приложение в C#, которое подключается к базе данных PostGres с помощью Npg sql .EntityFrameworkCore. PostgreSQL. При локальном запуске я запускаю базу данных, а затем приложение, и все работает нормально. Однако при развертывании оно запускается в настройке docker -compose, и, поскольку приложение запускается быстрее, чем Postgres, происходит сбой с сообщением «В соединении отказано» или «система базы данных запускается».

Моя миграция выглядит примерно так:

        public void Migrate()
    {
        var pendingMigrations = _context.Database.GetPendingMigrations().Count();
        if (pendingMigrations > 0)
        {
            Logger.LogInformation($"Applying {pendingMigrations} migration(s)");
            _context.Database.Migrate();
            _context.SaveChanges();
            Logger.LogDebug($"Database migration complete");
        }
        else
        {
            Logger.LogDebug($"No pending migrations");
        }
    }

А мой startup.cs выглядит так:

        public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContextPool<MyDbContext>(options => options.UseNpgsql(MyDbContextFactory.PostgresConnectionString));
        services.AddScoped<IMyDb, MyDb>();
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IMyDb db)
    {
        ...
        db.Migrate();
    }

Что было бы лучше всего, чтобы гарантировать, что он ждет запуска базы данных вверх? Кажется, я где-то видел что-то вроде запуска вызова Migrate () в al oop и перехвата исключения?

...