Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

rollback da migration

Pessoal gostaria de saber qual é o comando para fazer o rollback(na migration chama down) da migration, na doc do entity fala que para isso devo estar usando o update-database e o nome da migration para fazer o rollback, mas nao esta funcionando, devo colocar mais alguma outra informação junta?

https://docs.microsoft.com/pt-br/ef/core/managing-schemas/migrations/

5 respostas

Oi Julio Cesar, tudo bem?

O comando é esse mesmo que você mencionou:

Update-Database NomeDaMigracao

O que acontece quando você roda o comando? Pode postar aqui o log gerado, pra darmos uma olhada, por favor?

O rollback so executa se eu fizer update da migration anterior, se eu executar o update-database duas vezes na mesma migration ele nao aciona o rollback.

migration de unidade (no projeto ha 3 migration, inicial, unidade e compras, o log abaixo é relacionado a segunda migration), quando ocorre o rollback.

PM> update-database 20190115133153_Unidade
Executed DbCommand (67ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT OBJECT_ID(N'__EFMigrationsHistory');
Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT OBJECT_ID(N'__EFMigrationsHistory');
Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT [MigrationId], [ProductVersion]
FROM [__EFMigrationsHistory]
ORDER BY [MigrationId];
Reverting migration '20190115141738_Compra'.
Executed DbCommand (6ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
DROP TABLE [Compras];
Executed DbCommand (0ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
DELETE FROM [__EFMigrationsHistory]
WHERE [MigrationId] = N'20190115141738_Compra';
Done.

Log quando eu executo novamente a migration unidade.

PM> update-database 20190115133153_Unidade
Executed DbCommand (67ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT OBJECT_ID(N'__EFMigrationsHistory');
Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT OBJECT_ID(N'__EFMigrationsHistory');
Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT [MigrationId], [ProductVersion]
FROM [__EFMigrationsHistory]
ORDER BY [MigrationId];
Done.
PM> 

OI Julio

Depois que você executa os comandos acima, como fica o estado do banco de dados? fica consistente com a migração "20190115133153_Unidade"? Se estiver, esse é o comportamento desejado, então não vejo problemas.

Quando você roda "update-database 20190115133153_Unidade", o banco de dados de histórico de migrações ("dbo._MigrationHistory") do EF é comparado com a migração "20190115133153Unidade" e, como você já tinha aplicado o rollback, então ambos os modelos (banco de dados e migração) são idênticos, portanto não há mais nada a ser aplicado.

Sim a base __EFMigrationsHistory esta coerente com a migration, :D

eu achei sim que haveria algum comando do tipo downgrade ou drop para o migration, mas na verdade o downgrade acontece por conta da execucao de uma migration anterior.

Obrigado :D

solução!

Oi Julio

Agora sim! Então está esclarecido, né? Podemos fechar o chamado?