我想删除一个有一千列的表,让迁移重新创建它。
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到新窗口并从那里执行。
但是,有没有一种简单的方法可以使用代码迁移?
4条答案
按热度按时间mklgxw1f1#
我可以看到两种可能的方式:
1.从数据库中删除表
1.生成新迁移(使用
Add-Migration
)。将生成创建缺失表的新迁移1.执行迁移(使用
Update-Database
)或
1.从上下文中删除实体(记住删除与其他实体的所有关系)
1.使用
Add-Migration
生成迁移(它将生成一个drop table方法)1.使用
Update-Database
执行迁移1.将实体添加到上下文
1.使用
Add-Migration
生成新迁移(它将生成一个创建表方法)1.使用
Update-Database
执行迁移希望有帮助!
0x6upsns2#
还有另一种选择:
1.手动删除要重新创建的表
1.从“__EFMigrationsHistory”表中删除链接到已删除表的记录
1.运行“update-database”
它应该再次运行所有不在历史记录中的迁移。如果您的迁移涉及多个表,请注意这一点。您可能需要忽略一些迁移,然后手动添加更改。
从上下文中删除DbSets也应该可以工作,而且可能更好,但对我来说,在Entity-Framework-Core中它根本不起作用。
bvjxkvbb3#
我没想好用什么程序化的方法。但我没试过。
以下是我的成功:
在SQL Management Studio中,我为整个数据库(或您知道相关的表)生成了脚本。我发现了与MyTable相关的任何外键(FK)约束、索引等。还为MyTable生成了SQL插入语句。删除约束、删除表、创建表(显然具有适当的字段顺序)、插入数据、重新创建FK约束。
为了测试数据库,我尝试更改数据库。
一切正常。
zbdgwd5y4#
1.删除包含子内容的迁移文件夹。
1.而不是手动删除表
1.从包管理器控制台运行update-database命令
一切都将正常工作快乐编码