Migrações com Docker .NET Core
No ambiente tradicional como vimos anteriormente em Migrações você roda os comandos como dotnet ef migrations add e dotnet ef database update diretamente do terminal. Com o docker a abordagem muda um pouco, pois o aplicação rodam dentro de conteiners isolados. O exemplo as seguir é considerando uma aplicação e banco de dados rodando em containeres isolados por meio do Docker. Fluxo de migração do EF Core com Docker 1. Criar migração Se sua aplicação ainda não tem Migration, você pode gerá-la. dotnet ef migrations add InitialCreate Existem duas abordagem para migrar as informações de migração. Aplicar a migração no banco dentro do container ou configurar a aplicação para aplicar as migrações automaticamente 2. Aplicar migração no banco de dados dentro do container Dado que o banco de dados está rodando dentro do Docker, você precisa rodar o dotnet ef database update dentro do container ou configurar sua aplicação para aplicar as migrações automaticamente. Acesse o shell do container da sua aplicação docker exec -it sh Dentro do container, rode: dotnet ef Se der erro de comando não encontrado, você precisa instalar a ferramenta: dotnet tool install --global dotnet-ef export PATH="$PATH:/root/.dotnet/tools" Dentro do container, rode o comando dotnet ef migrations add InitialCreate Isso aplicará a migração no banco de dados SQL Server que está rodando dentro do container tagmefive_db. 2.1 Aplicar migração automática no startup da aplicação Outra abordagem é modificar o Program.cs para rodar as migrações automaticamente ao iniciar o container: using (var scope = app.Services.CreateScope()) { var dbContext = scope.ServiceProvider.GetRequiredService(); dbContext.Database.Migrate(); } Você pode modularizar e escrever em um arquivo fora do startup se preferir

No ambiente tradicional como vimos anteriormente em Migrações você roda os comandos como dotnet ef migrations add
e dotnet ef database update
diretamente do terminal. Com o docker a abordagem muda um pouco, pois o aplicação rodam dentro de conteiners isolados.
O exemplo as seguir é considerando uma aplicação e banco de dados rodando em containeres isolados por meio do Docker.
Fluxo de migração do EF Core com Docker
1. Criar migração
Se sua aplicação ainda não tem Migration, você pode gerá-la.
dotnet ef migrations add InitialCreate
Existem duas abordagem para migrar as informações de migração. Aplicar a migração no banco dentro do container ou configurar a aplicação para aplicar as migrações automaticamente
2. Aplicar migração no banco de dados dentro do container
Dado que o banco de dados está rodando dentro do Docker, você precisa rodar o dotnet ef database update
dentro do container ou configurar sua aplicação para aplicar as migrações automaticamente.
- Acesse o shell do container da sua aplicação
docker exec -it sh
- Dentro do container, rode:
dotnet ef
Se der erro de comando não encontrado, você precisa instalar a ferramenta:
dotnet tool install --global dotnet-ef
export PATH="$PATH:/root/.dotnet/tools"
- Dentro do container, rode o comando
dotnet ef migrations add InitialCreate
Isso aplicará a migração no banco de dados SQL Server que está rodando dentro do container tagmefive_db
.
2.1 Aplicar migração automática no startup da aplicação
Outra abordagem é modificar o Program.cs
para rodar as migrações automaticamente ao iniciar o container:
using (var scope = app.Services.CreateScope())
{
var dbContext = scope.ServiceProvider.GetRequiredService<SeuDbContext>();
dbContext.Database.Migrate();
}
Você pode modularizar e escrever em um arquivo fora do startup se preferir