【问题标题】:Using EF Core, how to update database's new created schema within code?使用 EF Core,如何在代码中更新数据库新创建的架构?
【发布时间】:2023-01-13 15:14:51
【问题描述】:
我在 Postgres 中使用 EF Core 在代码中创建了新模式。但是然后我需要在运行时将我的迁移迁移到新创建的模式(不是“公共”模式)。所有这些都在一个数据上下文中。
string command = $"CREATE SCHEMA IF NOT EXISTS {name} AUTHORIZATION CURRENT_USER"; dataContext.Database.ExecuteSqlRaw(command);
我使用此命令在运行时创建新模式。
然后试了dataContext.Database.Migrate();
【问题讨论】:
标签:
asp.net
postgresql
entity-framework
【解决方案1】:
使用 ExecuteSqlRaw 方法创建新架构后,您可以通过在 DbContext 实例上运行 Migrate 方法来更新数据库的架构。但是,此方法只会更新默认模式(在 Postgres 中通常为“public”)的模式,而不会更新您创建的新模式。
要更新新架构,您需要在调用 Migrate 方法时在迁移配置中指定架构名称。
这是一个例子:
使用 (var dataContext = new MyDbContext())
{
string command = $"CREATE SCHEMA IF NOT EXISTS {name} AUTHORIZATION CURRENT_USER";
dataContext.Database.ExecuteSqlRaw(命令);
dataContext.Database.SetCommandTimeout(60);
var migrationsAssembly = typeof(MyDbContext).GetTypeInfo().Assembly;
var migration = new Migrations.MigrationsIdempotent(dataContext, name);
var migrator = new Migrator(migration, dataContext.Database.GetDbConnection(), migrationsAssembly);
migrator.Migrate();
}
您需要将模式名称传递给 MigrationsIdempotent 类构造函数,该类将在 Migrator 构造函数中使用。
这样,Migrate 方法将为您创建的新架构更新架构,而不是默认架构。
请务必注意,您需要传递包含迁移文件的正确程序集才能使其正常工作。