【发布时间】: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