重置entity framework迁移
我已经把我的迁移IgnoreChanges
了,我在初始迁移时使用了IgnoreChanges
,但是现在我想删除所有的迁移,并开始使用所有逻辑进行初始迁移。
当我删除文件夹中的迁移,并尝试和Add-Migration
它不会生成一个完整的文件(这是空的 – 因为我没有做任何改变,因为我上次,但现在删除,迁移)。
有没有Disable-Migrations命令,所以我可以重新运行Enable-Migrations
?
你需要 :
- 删除状态:删除项目中的migrations文件夹; 和
- 删除数据库中的
__MigrationHistory
表(可能在系统表下); 然后 -
在程序包pipe理器控制台中运行以下命令:
Enable-Migrations -EnableAutomaticMigrations -Force
使用或不使用
-EnableAutomaticMigrations
-
最后,你可以运行:
Add-Migration Initial
问题:你已经搞糟了你的迁移,你想重置它,而不删除你现有的表。
问题:由于EF想从头开始创build表,因此无法使用数据库中的现有表来重置迁移。
该怎么办:
-
从Migrations_History表中删除现有的迁移。
-
从Migrations文件夹中删除现有的迁移。
-
运行添加迁移重置。 这将在您的Migration文件夹中创build一个包括创build表的迁移(但不会运行,因此不会出错)。
-
您现在需要在MigrationHistory表中创build初始行,以便EF具有当前状态的快照。 如果您申请迁移,EF将执行此操作。 但是,由于表已经存在于数据库中,因此无法应用您刚刚创build的迁移。 因此,进入迁移并注释掉“Up”方法中的所有代码。
-
现在运行update-database。 它将应用迁移(而不实际更改数据库)并在MigrationHistory中创build一个快照行。
您现在已经重置您的迁移,并可能继续正常的迁移。
怎么样
Update-Database –TargetMigration: $InitialDatabase
在包pipe理器控制台? 它应该将所有更新重置为其早期状态。
参考链接: Code First Migrations – 迁移到特定版本(包括降级)
要解决这个问题,你需要:
-
删除Migrations文件夹中的所有* .cs文件。
-
删除数据库中的_MigrationHistory表
-
运行
Enable-Migrations -EnableAutomaticMigrations -Force
-
运行
Add-Migration Reset
然后,在public partial class Reset : DbMigration
类中,需要注释所有现有和现有的表:
public override void Up() { // CreateTable( // "dbo.<EXISTING TABLE NAME IN DATABASE> // ... // } ... }
如果你错过了这一切都将失败,你必须重新开始!
- 现在运行
Update-Database -verbose
如果你已经完成了上述工作,这应该是成功的,现在你可以照常进行了。
我的问题原来是我手动删除Migrations文件夹。 我这样做是因为我想备份内容,所以我只是将该文件夹拖出项目。 我稍后通过将其放回(在创build备份副本之后),然后通过在“解决scheme资源pipe理器”中右键单击并从popup菜单中select“删除”来删除Migrations文件夹,从而解决了问题。
在EntityFramework 6中,请尝试:
Add-Migration Initial
以便更新最初的迁移文件。
在EF6中
- 删除“迁移”文件夹中的所有文件…但不是“初始创build”或“configuration”。
- 删除数据库。
- 现在运行
Add-Migration Initial
。 - 现在你可以'更新数据库',一切都会好的。
Enable-Migrations -EnableAutomaticMigrations -Force