我创建了迁移并创建了数据库和表。例如,表格是
A B C D E
。现在我又改变了部分代码并运行了update-database
命令。一切都顺利而且很好,表格显示了列。现在不小心我手动删除了两个表D and E
。现在,当我尝试使用update-database
运行迁移时。它运行正常但不会创建我手动删除的表。我试图删除现有的迁移并重新运行update-database
。它给出了除两个表之外的错误。 “A,B,C”bla bla名称中已存在一个对象。
知道如何在不删除数据库的情况下摆脱这种情况并使用迁移重新创建已删除的表吗?因为我不想删除数据库,因为它包含其余表中的数据。如何在这种情况下继续我在数据库中有现有表,并且我不小心从SSMS手动删除了SQL Server中的几个表。
如何使用迁移重新创建表?
哦,我的实体框架版本是6.0.2
我终于找到了解决方案。它基本上改变了我们如何使用迁移的策略。迁移添加迁移仅可以检查模型和先前的迁移时间戳cs文件。所以除非我们在nuget中提供update-database
命令。从来没有真正知道哪些表已被手动删除。因此,当我们尝试执行某些迁移时,例如对表的更改。它会导致有问题的迁移,因为该表在数据库中不存在,但迁移假定它已存在。因此,有一个手工工作。以下是我们从数据库中手动删除表后的步骤
createTable
代码。update-database command
。这将创建已删除的数据库表。但是,没有自动命令可以在所有实体和数据库表之间同步。这是我们必须在迁移中部分手动跟踪的内容。EF迁移历史记录存储在表_MigrationHistory中。从数据库中删除表。警告:这将清除所有迁移历史记录,您必须重新创建所有表
恕我直言最直接的解决方案是从迁移生成SQL脚本并仅运行脚本的一部分,从而创建缺少的表。
Update-Database -Source MigrationBeforeCreatingTables -Target MigrationAfterCreatingTables -Script