Parece uma tarefa muito comum, mas não consigo encontrar uma maneira fácil de fazer isso.
Quero desfazer a última migração aplicada. Eu esperava um comando simples, como
PM> Update-Database -TargetMigration:"-1"
Em vez disso, tudo o que posso fazer é:
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"
(Pelo menos eu posso usar apenas o nome, pulando o carimbo de data e hora ...)
Existe uma maneira mais fácil?
entity-framework
entity-framework-4
database-migration
ef-migrations
Cristian Diaconescu
fonte
fonte
Respostas:
A partir do EF 5.0, a abordagem descrita é a preferida. assim
PM> Update-Database -TargetMigration:"NameOfSecondToLastMigration"
ou usando suas migrações de exemplo
PM> Update-Database -TargetMigration:"CategoryIdIsLong"
Uma solução seria criar um script PS de wrapper que automatize as etapas acima. Além disso, sinta-se à vontade para criar uma solicitação de recurso para isso, ou melhor ainda, tente implementá-la! https://github.com/dotnet/ef6
fonte
dotnet ef database update LastGoodMigration
no entanto, isso parece confuso, pois estou vindo de um nó em segundo plano e usando knex, sequlize, eles têm um comando para reverter a última alteração, existe algum comando para reverter a última ação aplicada ao banco de dados ?Quero acrescentar alguns esclarecimentos a este tópico:
O que você está fazendo acima é dizer que deseja reverter todas as migrações ATÉ que fique com a migração especificada. Portanto, se você usa GET-MIGRATIONS e descobre que possui A, B, C, D e E, o uso desse comando reverte E e D para levá-lo a C:
Além disso, a menos que alguém possa comentar o contrário, notei que você pode usar um valor ordinal e a opção -Target curta (assim, -Target é o mesmo que -TargetMigration). Se você deseja reverter todas as migrações e começar de novo, poderá usar:
0, acima, reverteria mesmo a PRIMEIRA migração ( este é um comando destrutivo - saiba o que você está fazendo antes de usá-lo! ) - algo que você não pode fazer se usar a sintaxe acima que requer o nome de a migração de destino (o nome da 0ª migração não existe antes da aplicação da migração!). Portanto, nesse caso, você deve usar o valor 0 (ordinal). Da mesma forma, se você aplicou as migrações A, B, C, D e E (nessa ordem), o ordinal 1 deve se referir a A, o ordinal 2 deve se referir a B e assim por diante. Portanto, para reverter para B, você pode usar:
ou
Editar outubro de 2019:
De acordo com essa resposta relacionada a uma pergunta semelhante, o comando correto é
-Target
para o EF Core 1.1 enquanto-Migration
para o EF Core 2.0.fonte
$InitialDatabase
.ls variable:*
isso parece$InitialDatabase
simplesmente uma variável do PowerShell definida como 0, não há outras definidas, mesmo no código-fonte EF atual. E, obter-migrações não retorna nada, ele só escreve para o console, então você não pode repetir os objetos retornados ...Em EntityFrameworkCore :
onde
20161012160749_AddedOrderToCourse
é um nome de migração para o qual você deseja reverter.fonte
A solução é:
fonte
Lembrete adicional:
Se você tiver vários tipos de configuração, precisará especificar o [Nome_da_Configuração]
fonte
No EF Core, você pode inserir o comando
Remove-Migration
no console do gerenciador de pacotes após adicionar sua migração incorreta.O console sugere que você faça isso se sua migração envolver uma perda de dados:
fonte
Aviso : Isso reverterá TODAS as migrações no EFCore! Por favor, use com cuidado :)
fonte
Descobri que isso funciona quando executado no console do gerenciador de pacotes:
dotnet ef migrations list | select -Last 2 | select -First 1 | ForEach-Object { Update-Database -Migration $_ }
Você pode criar um script que facilite.
fonte
Estou usando EntityFrameworkCore e uso a resposta de @MaciejLisCK. Se você tiver vários contextos de banco de dados, também precisará especificar o contexto adicionando o parâmetro context, por exemplo:
Update-Database 201207211340509_MyMigration -context myDBcontext
(onde
201207211340509_MyMigration
está a migração para a qual você deseja reverter emyDBcontext
é o nome do seu contexto de banco de dados)fonte
Para esse problema, sugiro este link:
https://elegantcode.com/2012/04/12/entity-framework-migrations-tips/
fonte
Caso exista a possibilidade de o dataloss EF não concluir o comando update-database, pois AutomaticMigrationDataLossAllowed = false por padrão e roolbacka a ação, a menos que você a execute com o parâmetro -force .
ou
fonte