nam*_*nam 139 c# entity-framework-core visual-studio-2015 .net-core asp.net-core
当我PM> Remove-Migration -context BloggingContext使用EF Core在VS2015中运行ASP.NET Core项目时,我收到以下错误:
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.
Run Code Online (Sandbox Code Playgroud)
我怎么能取消申请呢?我正在使用最新版本的ASP.NET Core 1.0,EF Core和VS2015 Update 3.
ade*_*lin 166
使用 > dotnet ef database update <previous-migration-name>
然后尝试删除上次迁移.
删除没有数据库更新的迁移不起作用,因为您将更改应用于数据库.
Ron*_*mos 103
要完全删除所有迁移并重新开始,请执行以下操作:
dotnet ef database update 0
dotnet ef migrations remove
Run Code Online (Sandbox Code Playgroud)
Bra*_*rad 49
您仍然可以使用该Update-Database命令.
Update-Database -Migration <migration name> -Context <context name>
Run Code Online (Sandbox Code Playgroud)
但是,根据您的迁移名称判断,我认为这是第一次迁移,因此该命令可能无法正常工作.您应该能够从__MigrationHistory数据库中的表中删除该条目,然后Remove-Migration再次运行该命令.您也可以删除迁移文件,然后重新开始.
Dmi*_*nov 24
要恢复上次应用的迁移,您应该(包管理器控制台命令):
PM> Update-Database <prior-migration-name>PM> Remove-MigrationUPD:在最新版本的Visual Studio(2017)中似乎不需要第二步.
Joh*_*ngi 22
您只需按值定位迁移即可
Update-Database -Migration:0
Run Code Online (Sandbox Code Playgroud)
然后继续删除它
Remove-Migration
Run Code Online (Sandbox Code Playgroud)
Oma*_*mar 20
所有命令都将使用 编写dotnet。
该解决方案是为 .net Core 3.1 提供的,但也应该与后续版本兼容
cd to_your_project然后dotnet ef migrations remove注意:仅当您尚未执行dotnet ef database update或在 C# 代码中调用时Database.Migrate()(换句话说,仅当迁移尚未应用到数据库时),删除迁移才有效。
dotnet ef migrations add <your_changes>并应用它,这是微软推荐的。dotnet ef database update <your_migration_name_to_jump_back_to>注意:如果您选择反转迁移,但所涉及的特定列或表已存在并正在数据库中使用,则此操作将完全删除该列或表。因此,您将丢失其中存储的所有数据。
恢复迁移后,您可以删除不需要的迁移
Alb*_*rtK 18
取消应用特定迁移:
dotnet ef database update <previous-migration-name>
or
PM> Update-Database -Migration <previous-migration-name>
Run Code Online (Sandbox Code Playgroud)
要取消应用所有迁移:
dotnet ef database update 0
or
PM> Update-Database -Migration 0
Run Code Online (Sandbox Code Playgroud)
要删除上一次迁移:
dotnet ef migrations remove
or
PM> Remove-Migration
Run Code Online (Sandbox Code Playgroud)
要取消应用并删除上一次迁移,请执行以下操作:
dotnet ef migrations remove --force
or
PM> Remove-Migration -Force
Run Code Online (Sandbox Code Playgroud)
小智 13
在已经应用于数据库之后,"取消应用"最多(最近的?)迁移:
希望这有帮助并且适用于项目中的任何迁移......我仅对最近的迁移进行了测试...
快乐的编码!
Cha*_*lie 10
由于问题本身涉及第一次迁移,所以这个答案适用于任何在这里寻找方法恢复上次迁移的人,因为大多数答案不涵盖替代方案(对于我们大多数人来说,这不是我们的第一次迁移,我们无法擦除整个迁移)迁移历史)。
这些命令适用于包管理器控制台。
假设您的代码中有以下迁移:
如果您已经像问题中那样将迁移应用到数据库
跑步:
Update-Database -Migration <Last_Good_Migration_Name>
注意:名称不应包含日期前缀。例如:Update-Database -Migration LastGoodMigration
然后删除错误的迁移运行:
Remove-Migration
注意:由于我们有两个错误的迁移,请运行该Remove Migration命令两次。
如果您尚未将迁移应用到数据库
赶紧跑:
Remove-Migration
在我们的例子中运行Remove Migration命令两次。
希望这对某人有帮助。
2023 年 8 月更新
如果您有多个数据库上下文,请添加-Context Context_Name到每个命令。例如:
Remove-Migration -Context MyDbContext
小智 9
要在 EF Core 1.0 中取消应用迁移,请使用以下命令:
dotnet ef database update {migration_name}
Run Code Online (Sandbox Code Playgroud)
使用您想要保留更改的迁移的迁移名称。可以使用以下命令找到迁移名称列表:
dotnet ef migrations list
Run Code Online (Sandbox Code Playgroud)
dotnet ef database update <the-migration-you-want-to-recover>
dotnet ef migrations remove
Run Code Online (Sandbox Code Playgroud)
不要忘记删除调用,因为这将为您删除迁移文件并更新快照文件。
通常,如果您使用的是Package Manager控制台,则删除特定迁移的正确方法是引用迁移名称
Update-Database -Migration {Name of Migration} -Context {context}
Run Code Online (Sandbox Code Playgroud)
删除根据文档应用的最后一次迁移的另一种方法是使用以下命令:
dotnet ef migrations remove
Run Code Online (Sandbox Code Playgroud)
此命令应从解决方案目录中的开发人员命令提示符(如何打开命令提示符)执行。
例如,如果您的应用程序位于名称“ Application”内,并且位于文件夹c:\ Projects中。那么您的路径应该是:
C:\Projects\Application
Run Code Online (Sandbox Code Playgroud)
您应该从“ _EFMigrationsHistory”表中删除迁移“ 20160703192724_MyFirstMigration”记录。
否则,此命令将删除“迁移”并删除“迁移文件夹”:
> remove-migration -force
Run Code Online (Sandbox Code Playgroud)
要恢复应用于数据库的所有迁移,只需运行:
update-database 0
Run Code Online (Sandbox Code Playgroud)
之后应该运行Remove-Migration与迁移目录中可见的迁移文件一样多的次数。该命令会删除最新的迁移并更新快照。