Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: jaredcnanceОтветов: 1

Итак, я пытаюсь выяснить, каков золотой путь для запуска приложения с базой данных 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 в этих сборках?

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

entity-framework-core

Ответы

Ответ 1 · рейтинг -3 · jaredcnance

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы