【问题标题】:.Net Core - Change database migrations depending on environment.Net Core - 根据环境更改数据库迁移
【发布时间】:2016-08-19 20:00:03
【问题描述】:

所以,我试图找出针对开发中的 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
  • 我认为预处理器指令在这里没有帮助。环境是已知的。问题是如何为两个不同的目标数据库维护单独的迁移集合。
  • 好吧,我想我不是很清楚。这是非常特定于.Net 核心的。环境在运行时是已知的。我们总是知道它是否生产。问题与维护不同的实体框架代码优先迁移集有关..
  • @user2322026:我删除了我的答案,因为它似乎对你的要求没有任何用处,而且我对你所使用的具体内容知之甚少,无法给出非一般的答案。对于误解你的意思,我深表歉意!感谢您的耐心和回复!

标签: c# entity-framework-core .net-core


【解决方案1】:

在想了很久之后,我认为这是一个反模式。无论我的特定用例如何(开发中的 postgres,生产中的 SQL Server),我认为在不同的环境中使用不同的数据库系统是不受欢迎的,因为部署后可能会出现意外问题。最好在开发和生产中坚持使用同一个。

【讨论】:

  • 作为一个更新,我最终为 PostgreSQL 和 MSSQL Server 实现了这个。但是,我还包括了两种实现的验收测试。我没有尝试维护对两个提供商都适用的单一迁移集,而是将其拆分为单独的项目(MyApp.Migrations.SqlServer 和 MyApp.Migrations.PostgreSql)并为两者运行迁移。
猜你喜欢
  • 1970-01-01
  • 2017-05-26
  • 2022-11-13
  • 2021-10-25
  • 1970-01-01
  • 2018-08-01
  • 2020-05-07
  • 1970-01-01
  • 2018-06-19
相关资源
最近更新 更多