我正在尝试创建一个迁移,这将清除整个schema的数据,然后运行迁移。 我找到了一种仅针对上下文集运行迁移的方法。 我找不到删除给定上下文中的数据的方法,而不是整个数据库中的数据。
仅用于迁移的当前代码:
var context = scope.ServiceProvider.GetRequiredService<TContext>();
await context.Database.MigrateAsync();
context.Database.EnsureDeleted();
允许我在运行迁移之前删除数据库,但它似乎忽略了我提供的上下文(正如文档中所述)。
关于如何删除上下文中的数据有什么想法吗?
谢谢!
我建议创建一个空迁移,然后添加原始 SQL 以删除架构:
public partial class DropSchemaMigration : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.Sql("DROP SCHEMA MY_SCHEMA;");
}
}
然后进行其他迁移。假设这是一种代码优先的方法。 您可以存储所有更改、执行空迁移、弹出存储并生成其他迁移。
或者,如果感觉更自然,请进行迁移,并在 Up 方法的第一行中设置 SQL 命令
public partial class MyMigration: Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.Sql("DROP SCHEMA MY_SCHEMA;");
//auto-generated mappings
}
}
有
MigrationBuilder
方法可以做到这一点:
migrationBuilder.DropSchema("myschema");
从 EF 使用应该是安全的,尽管我自己还没有测试过。