EF 迁移 - 迁移前删除数据库架构

问题描述 投票:0回答:2

我正在尝试创建一个迁移,这将清除整个schema的数据,然后运行迁移。 我找到了一种仅针对上下文集运行迁移的方法。 我找不到删除给定上下文中的数据的方法,而不是整个数据库中的数据。

仅用于迁移的当前代码:

var context = scope.ServiceProvider.GetRequiredService<TContext>();
await context.Database.MigrateAsync();

context.Database.EnsureDeleted();
允许我在运行迁移之前删除数据库,但它似乎忽略了我提供的上下文(正如文档中所述)。

关于如何删除上下文中的数据有什么想法吗?

谢谢!

c# .net entity-framework entity-framework-core
2个回答
2
投票

我建议创建一个空迁移,然后添加原始 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
                }
        
            }

0
投票

MigrationBuilder
方法可以做到这一点:

migrationBuilder.DropSchema("myschema");

从 EF 使用应该是安全的,尽管我自己还没有测试过。

© www.soinside.com 2019 - 2024. All rights reserved.