如何取消应用在ASP.NET核心迁移与EF核心
当我在VS2015运行PM> Remove-Migration -context BloggingContext
使用EF核心,我得到以下错误的ASP.NET核心项目:如何取消应用在ASP.NET核心迁移与EF核心
System.InvalidOperationException: The migration '20160703192724_MyFirstMigration' has already been applied to the database. Unapply it and try again. If the migration has been applied to other databases, consider reverting its changes using a new migration. at Microsoft.EntityFrameworkCore.Migrations.Design.MigrationsScaffolder.RemoveMigration(String projectDir, String rootNamespace, Boolean force)
at Microsoft.EntityFrameworkCore.Design.MigrationsOperations.RemoveMigration(String contextType, Boolean force)
at Microsoft.EntityFrameworkCore.Tools.Cli.MigrationsRemoveCommand.<>c__DisplayClass0_0.<Configure>b__0()
at Microsoft.Extensions.CommandLineUtils.CommandLineApplication.Execute(String[] args)
at Microsoft.EntityFrameworkCore.Tools.Cli.Program.Main(String[] args)
The migration '20160703192724_MyFirstMigration' has already been applied to the database. Unapply it and try again. If the migration has been applied to other databases, consider reverting its changes using a new migration.
我怎样才能取消应用?我使用ASP.NET 1.0的核心,EF Core和VS2015更新3
使用dotnet ef database update <previous-migration-name>
然后尝试删除最后一个迁移的最新版本。
删除没有数据库更新的迁移不起作用,因为您对数据库应用了更改。
我仍然收到相同的错误。我第一次使用'dotnet ef数据库更新MyFirstMigration --context BloggingContext'成功地工作。然后我运行'dotnet ef migrations remove --context BloggingContext',它给了我和我的文章 – nam
相同的错误信息。您需要在'MyFirstMigration'之前更新迁移。如果这是第一次迁移(顾名思义),那么您可以使用'dotnet ef database update 0'来恢复(不应用)来自数据库的所有迁移。你应该可以运行'dotnet ef migrations remove'。 – bvpb
另外值得注意的是,您应该只使用迁移的名称,不包括日期前缀 – Structed
您仍然可以使用Update-Database
命令。
Update-Database -Migration <migration name> -Context <context name>
但是,迁移的名称来看我假设它是第一个迁移,这样的命令可能无法正常工作。您应该能够从数据库中的__MigrationHistory
表中删除条目,然后再次运行Remove-Migration
命令。您也可以删除迁移文件并重新开始。
您可以从程序包管理控制台调用Update-Database或从项目目录的命令提示中调用dotnet ef database update 。 – kimbaudi
为了澄清Brad的答案 - “迁移名称”应该是您想要迁移回迁移的名称(也就是说,您可能会在迁移之前将其迁移),而不是迁移的名称你想撤消。 –
要完全删除所有迁移和从头再来,请执行下列操作:
dotnet ef database update 0
dotnet ef migrations remove
要“不应用”最(近?)迁移后,它已经被应用到数据库:
- 打开SQL Server对象资源管理器(查看 - >“SQL Server对象资源管理器”)
- 通过将小三角形展开到侧面,导航到链接到项目的数据库。
- 展开“表”
- 找到名为“dbo._EFMigrationsHistory”的表。
- 右键单击它并选择“查看数据”以查看Visual Studio中的表条目。
- 删除与您希望取消应用的迁移相对应的行(如果提示,请对该警告说“是”)。
- 在具有project.json文件的目录中的命令窗口中再次运行“dotnet ef migrations remove”。或者,在软件包管理器控制台中运行“Remove-Migration”命令。
希望这有助于和适用于项目中的任何迁移......我测试了这一点只是到最近的迁移......
编码愉快!
这实际上并不适用迁移,只是让框架“认为”它没有被应用。如果你这样做,你的数据库将处于不一致的状态。 –
要删除已根据docs使用命令应用上次迁移:
dotnet ef migrations remove
这个命令应该从解决方案目录内的显影剂命令提示符(how to open command prompt)执行。
例如,如果您的应用程序名称为“Application”,并位于文件夹c:\ Projects中。那么你的路径应该是:
C:\Projects\Application
为了不应用在EF核心迁移1.0使用命令:
DOTNET EF数据库更新{migration_name}
使用迁移的迁移名字直到您希望保留您的更改。
DOTNET EF迁移列表
在包管理器控制台:迁移的名称的列表可以使用发现
Update-Database Your_Migration_You_Want_To_Revert_To
More options and explanation on how to revert migrations can be seen here
尝试加入'-force'在结束 – prospector