【问题标题】: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 方法将为您创建的新架构更新架构,而不是默认架构。

    请务必注意,您需要传递包含迁移文件的正确程序集才能使其正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-07
      • 1970-01-01
      • 2017-03-16
      • 1970-01-01
      • 2014-11-19
      • 2014-05-27
      • 1970-01-01
      相关资源
      最近更新 更多