asp.net 如何在代码优先迁移中强制删除并重新创建所选表?

7uhlpewt  于 2023-04-08  发布在  .NET
关注(0)|答案(4)|浏览(185)

我想删除一个有一千列的表,让迁移重新创建它。

DropTable("MyTableWithManyColumns");

但问题是我会像这样手动创建一个表

CreateTable(
            "dbo.MyTable",
            c => new
                {
                    RowId = c.Int(nullable: false, identity: true),
                    // many columns follow...
                })
            .PrimaryKey(t => t.RowId);

更简单的方法是使用SSMS并右键单击Drop Create Table到新窗口并从那里执行。
但是,有没有一种简单的方法可以使用代码迁移?

mklgxw1f

mklgxw1f1#

我可以看到两种可能的方式:
1.从数据库中删除表
1.生成新迁移(使用Add-Migration)。将生成创建缺失表的新迁移
1.执行迁移(使用Update-Database

1.从上下文中删除实体(记住删除与其他实体的所有关系)
1.使用Add-Migration生成迁移(它将生成一个drop table方法)
1.使用Update-Database执行迁移
1.将实体添加到上下文
1.使用Add-Migration生成新迁移(它将生成一个创建表方法)
1.使用Update-Database执行迁移
希望有帮助!

0x6upsns

0x6upsns2#

还有另一种选择:
1.手动删除要重新创建的表
1.从“__EFMigrationsHistory”表中删除链接到已删除表的记录
1.运行“update-database”
它应该再次运行所有不在历史记录中的迁移。如果您的迁移涉及多个表,请注意这一点。您可能需要忽略一些迁移,然后手动添加更改。
从上下文中删除DbSets也应该可以工作,而且可能更好,但对我来说,在Entity-Framework-Core中它根本不起作用。

bvjxkvbb

bvjxkvbb3#

我没想好用什么程序化的方法。但我没试过。
以下是我的成功:
在SQL Management Studio中,我为整个数据库(或您知道相关的表)生成了脚本。我发现了与MyTable相关的任何外键(FK)约束、索引等。还为MyTable生成了SQL插入语句。删除约束、删除表、创建表(显然具有适当的字段顺序)、插入数据、重新创建FK约束。
为了测试数据库,我尝试更改数据库。

ADD-MIGRATION XYZ
UPDATE-DATABASE -VERBOSE

一切正常。

zbdgwd5y

zbdgwd5y4#

1.删除包含子内容的迁移文件夹。
1.而不是手动删除表
1.从包管理器控制台运行update-database命令
一切都将正常工作快乐编码

相关问题