Cri*_*scu 406 entity-framework database-migration entity-framework-4 ef-migrations
这看起来像一个非常常见的任务,但我找不到一个简单的方法来做到这一点.
我想撤消上次应用的迁移.我本来期待一个简单的命令,比如
PM> Update-Database -TargetMigration:"-1"
Run Code Online (Sandbox Code Playgroud)
相反,我能想出的就是:
PM> Get-Migrations
Retrieving migrations that have been applied to the target database.
201208012131302_Add-SystemCategory
201207311827468_CategoryIdIsLong
201207232247409_AutomaticMigration
201207211340509_AutomaticMigration
201207200025294_InitialCreate
PM> Update-Database -TargetMigration:"CategoryIdIsLong"
Run Code Online (Sandbox Code Playgroud)
(至少我可以只使用名称,跳过时间戳......)
有没有更简单的方法?
Jaz*_*mov 384
我想为这个帖子添加一些说明:
Update-Database -TargetMigration:"name_of_migration"
Run Code Online (Sandbox Code Playgroud)
您在上面所做的是说您希望回滚所有迁移,直到您指定了迁移.因此,如果您使用GET-MIGRATIONS并且发现您有A,B,C,D和E,那么使用此命令将回滚E和D以使您进入C:
Update-Database -TargetMigration:"C"
Run Code Online (Sandbox Code Playgroud)
此外,除非有人可以发表相反的评论,否则我注意到你可以使用序数值和短的-Target开关(因此,-Target与-TargetMigration相同).如果要回滚所有迁移并重新开始,可以使用:
Update-Database -Target:0
Run Code Online (Sandbox Code Playgroud)
0,上面,甚至会回滚FIRST迁移(这是一个破坏性的命令 - 确保你在使用之前知道你正在做什么!) - 如果你使用上面的语法需要名称,你不能做的事情目标迁移(在应用迁移之前,第0次迁移的名称不存在!).因此,在这种情况下,您必须使用0(序数)值.同样,如果您已应用迁移A,B,C,D和E(按此顺序),则序号1应引用A,序号2应引用B,依此类推.所以要回滚到B你可以使用:
Update-Database -TargetMigration:"B"
Run Code Online (Sandbox Code Playgroud)
要么
Update-Database -TargetMigration:2
Run Code Online (Sandbox Code Playgroud)
根据 类似问题的相关答案,正确的参数名称是-Target
(对于EF Core 1.1)或-Migration
(对于EF Core 2.0)
And*_*ers 140
从EF 5.0开始,您描述的方法是首选方法.一种解决方案是创建一个自动执行上述步骤的包装PS脚本.此外,您可以随意创建功能请求,或者更好地实现它!http://entityframework.codeplex.com/
Mac*_*sCK 64
在EntityFrameworkCore中:
Update-Database 20161012160749_AddedOrderToCourse
Run Code Online (Sandbox Code Playgroud)
20161012160749_AddedOrderToCourse
您要回滚到的迁移名称在哪里.
pin*_*oad 18
我意识到使用 CLIdotnet
命令没有任何好的解决方案,所以这里有一个:
dotnet ef migrations list
dotnet ef database update NameOfYourMigration
Run Code Online (Sandbox Code Playgroud)
在NameOfYourMigration
输入要恢复到的迁移名称的位置。
然后您可以删除所有恢复的迁移以使用
dotnet ef migrations remove
Run Code Online (Sandbox Code Playgroud)
Max*_*Max 13
解决方案是:
Update-Database –TargetMigration 201609261919239_yourLastMigrationSucess
Run Code Online (Sandbox Code Playgroud)
小智 8
英孚核心
PM> Update-Database yourMigrationName
(恢复迁移)
PM> Update-Database
为我工作
在这种情况下,原始问题(yourMigrationName = CategoryIdIsLong)
我通过我的(BASH GIT) 控制台运行我的控制台,该控制台也运行Entity Framework Core。Update-Database
命令在包控制台之外不起作用,我必须使用这些donet ef
命令。
donet ef database update [Name of previous Migration]
Run Code Online (Sandbox Code Playgroud)
这将运行protected override void Down(MigrationBuilder migrationBuilder)
当前迁移的方法和所有其他方法,以返回到您设置的数据库版本。
我也使用-p [migration project]
-s [Project Solution]
. 这也允许它指向我的appsettings.[Enviorment].json,其中存储了我访问数据库的密码。
export ASPNETCORE_ENVIRONMENT=[ENVIORMENT]; donet ef database update [Name of previous Migration] -p [Migration Project Name] -s [Solution Name]
Run Code Online (Sandbox Code Playgroud)
其中很多内容可能是已知的,但希望提供详细信息,以防您第一次这样做。
小智 5
Remove-Migration
在 EF Core 中,您可以在添加错误的迁移后在包管理器控制台中输入命令。
如果迁移可能导致数据丢失,控制台建议您这样做:
一个操作被搭建起来,可能会导致数据丢失。请检查迁移的准确性。要撤消此操作,请使用删除迁移。
归档时间: |
|
查看次数: |
269418 次 |
最近记录: |