.Net Core — изменение миграции базы данных в зависимости от среды

Итак, я пытаюсь выяснить, каков золотой путь для запуска приложения с базой данных PostgreSQL в разработке и базой данных SQL Server в производстве. Сложность в том, что миграции будут разными. В настоящее время мой подход таков:

public void ConfigureServices(IServiceCollection services)
{
  services.AddDbContext<ApplicationDbContext>(SetDbContextOptionsForEnvironment, ServiceLifetime.Transient);
}

private void SetDbContextOptionsForEnvironment(DbContextOptionsBuilder options)
{
  if(_environmentName == "production") {
    options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]);
  }
  else {
    options.UseNpgsql(Configuration["Data:DefaultConnection:ConnectionString"]);
  }
}

Является ли предпочтительным способ сохранить миграции в отдельной сборке и указать эту сборку в параметрах? Итак, мне нужно иметь несколько определений одного и того же DbContext в этих сборках?


person jaredcnance    schedule 19.08.2016    source источник
comment
Вы можете использовать директивы препроцессора для управления этим. Создайте новую сборку для вас в разработке, определите символ условной компиляции для разработчиков postgre и используйте директивы препроцессора для переключения между реализациями... #if POSTGREWTFDUDE /* pgre */ #else /* ss */ #endif   -  person    schedule 19.08.2016
comment
Я не думаю, что директивы препроцессора здесь помогают. Окружение известно. Вопрос в том, как поддерживать отдельные коллекции миграции для двух разных целевых баз данных.   -  person jaredcnance    schedule 19.08.2016
comment
Хорошо, я думаю, я не ясно выразился. Это очень специфично для ядра .Net. Среда известна во время выполнения. Мы всегда знаем, производство это или нет. Вопрос связан с поддержкой различных наборов первых миграций кода фреймворка сущности.   -  person jaredcnance    schedule 20.08.2016
comment
@user2322026 user2322026: Я удалил свой ответ, так как казалось, что он и близко не полезен к тому, о чем вы спрашивали, и я недостаточно знал особенности того, что вы используете, чтобы дать не общий ответ. Прошу прощения за непонимание того, что вы имели в виду! Спасибо за терпение и ответ!   -  person Jesus is Lord    schedule 07.09.2016


Ответы (1)


Подумав об этом некоторое время, я считаю, что это анти-шаблон. Независимо от моего конкретного варианта использования (postgres в dev, SQL Server в prod), я думаю, что использование разных систем баз данных для разных сред не одобряется, поскольку после развертывания могут возникнуть неожиданные проблемы. Лучше придерживаться одного и того же для разработки и производства.

person jaredcnance    schedule 30.11.2016
comment
В качестве обновления я реализовал это как для PostgreSQL, так и для MSSQL Server. Но я также включил приемочные тесты для обеих реализаций. Вместо того, чтобы поддерживать единый набор миграций, который работает для обоих провайдеров, я разделил его на отдельные проекты (MyApp.Migrations.SqlServer и MyApp.Migrations.PostgreSql) и запускаю миграции для обоих. - person jaredcnance; 30.03.2017