如何在代码优先迁移中强制删除并重新创建选定的表?

时间:2015-12-14 12:32:59

标签: asp.net asp.net-mvc entity-framework

我想删除一个包含一千列的表,让迁移重新创建它。 我可以发一个

    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 个答案:

答案 0 :(得分:8)

我可以看到两种可能的方式:

  1. 从数据库中删除表
  2. 生成新迁移(使用Add-Migration)。将生成创建缺失表的新迁移
  3. 执行迁移(使用Update-Database
  4. OR

    1. 从上下文中删除实体(请记住删除与其他实体的所有关系)
    2. 使用Add-Migration生成迁移(它将生成丢弃表方法)
    3. 使用Update-Database
    4. 执行迁移
    5. 将实体添加到上下文
    6. 使用Add-Migration生成新的迁移(它将生成创建表方法)
    7. 使用Update-Database
    8. 执行迁移

      希望它有所帮助!

答案 1 :(得分:2)

还有另一种选择:

  1. 手动删除要重新创建的表
  2. 从“ __EFMigrationsHistory”表中删除链接到已删除表的记录
  3. 运行“更新数据库”

它将再次运行所有不在历史记录中的迁移。如果您进行的迁移涉及多个表,请务必谨慎。您可能需要省略一些迁移,然后手动添加更改。

从Context中删除DbSet也应该可行,并且可能会更好,但是对我来说,在Entity-Framework-Core中,它根本没有用。

答案 2 :(得分:1)

  1. 删除包含子内容的迁移文件夹。
  2. 比手动删除表格
  3. 从程序包管理器控制台运行update-database命令

一切正常 编码愉快

答案 3 :(得分:0)

我没有确定的编程方式。不是因为缺乏尝试。

这是我的成功:

在SQL Management Studio中,我为整个数据库(或您知道相关的表)生成了脚本。我发现任何与MyTable相关的外键(FK)约束,索引等。还为MyTable生成sql插入语句。删除约束,删除表,创建表(显然具有适当的字段顺序),插入数据,重新创建FK约束。

只是为了测试我尝试进行数据库更改的数据库。

ADD-MIGRATION XYZ
UPDATE-DATABASE -VERBOSE

一切正常。