Aprenda a Criar e Publicar Pacotes NuGet Profissionais
Migrations e EF Core: Evolua seu Banco com Segurança
Imagine que você tem uma aplicação em produção e precisa adicionar uma nova coluna à tabela de usuários para armazenar um campo extra de informação. Você não quer perder nenhum registro e também não quer fazer todo o processo manualmente em SQL. É aí que as migrations entram em cena! Elas permitem que você evolua seu banco de dados
Conceitos fundamentais de NoSQL: bases para trabalhar com MongoDB em C#Descubra os fundamentos do NoSQL e aprenda como utilizar MongoDB com C# para desenvolver aplicações .NET escaláveis e modernas até 2025. de forma organizada e segura, sem ficar refém de processos manuais e dores de cabeça.
Neste artigo, vamos explorar como as migrations funcionam na prática, por que são tão importantes, e como aplicá-las sem ameaçar seus dados. Além disso, vamos desvendar como o Entity Framework Core
🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real. utiliza essa ferramenta para permitir a evolução do banco de dados sem apagar dados preciosos, como se você estivesse reformando sua casa sem precisar jogar fora os móveis.
- [O que São Migrations e Por que Usar?](#o-que-são-migrations-e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades.-por-que-usar)
- [O Problema que as Migrations Resolvem](#o-problema
🤝 GitHub Básico: Versionamento para Iniciantes!Descubra como o GitHub facilita colaboração, versionamento e organização de código com este tutorial prático e essencial para desenvolvedores iniciantes.-que-as-migrations-resolvem)
- [Como Funciona o Processo de Migrations](#como-funciona-o-processo-de-migrations)
- [Como o EF Core
🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real. Gerencia as Migrations?](#como-o-ef-core-gerencia-as-migrations)
- [Criando e Aplicando Migrations Passo a Passo](#criando-e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades.-aplicando-migrations-passo-a-passo)
- [Evoluindo o Banco sem Perder Dados](#evoluindo-o-banco-sem-perder-dados)
- [Modificações Incrementais](#modificações-incrementais)
- [Rollback de Migrations](#rollback
Melhores práticas para atualização e rollback de serviços Native AOTAtualize serviços com eficiência usando Native AOT. Adote deploys paralelos, rollback rápido e saúde monitorada para alta performance.-de-migrations)
- [Migrações em Produção](#migrações-em-produção)
- [Boas Práticas
🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!Aprenda a dominar operadores aritméticos em C# com exemplos práticos, técnicas de cálculo e dicas para evitar erros e maximizar resultados. e Dicas Úteis](#boas-práticas-e-dicas-úteis)
- [Desafio Prático](#desafio-prático)
- [Erros Comuns
🔏 Criptografia Assimétrica: Domine RSA e Troca de Chaves!Descubra como a criptografia assimétrica protege a troca de chaves e garante segurança em sistemas digitais usando RSA, C# e práticas recomendadas. (e Como Evitá-los)](#erros-comuns-e-como-evitá-los)
- [Conclusão](#conclusão)
O que São Migrations e Por que Usar?🔗
- Migration (ou migração) é o processo de manter o esquema do banco de dados
Conceitos fundamentais de NoSQL: bases para trabalhar com MongoDB em C#Descubra os fundamentos do NoSQL e aprenda como utilizar MongoDB com C# para desenvolver aplicações .NET escaláveis e modernas até 2025. sincronizado com o modelo de entidades que seu código utiliza. Em vez de editar tabelas manualmente, você gera scripts e automatiza a evolução do banco. - Controle de Versão
🤝 GitHub Básico: Versionamento para Iniciantes!Descubra como o GitHub facilita colaboração, versionamento e organização de código com este tutorial prático e essencial para desenvolvedores iniciantes. no Banco: Migrations são como um “Git para o seu banco”, facilitando testes, rollback
Melhores práticas para atualização e rollback de serviços Native AOTAtualize serviços com eficiência usando Native AOT. Adote deploys paralelos, rollback rápido e saúde monitorada para alta performance. e auditorias. - Menos Erros
🎲 Desafio: Crie um Sistema de Login com Tratamento de Erros Robusto!Aprenda a criar um sistema de login robusto em C#, com tratamento de erros adequado, validação e segurança para evitar vulnerabilidades. Manuais: Nada de esquecer uma coluna ou tipo
🧠 Variáveis em C#: Onde os Dados Ganham Vida (e Nome!)Descubra como as variáveis em C# funcionam, com exemplos do mundo real, boas práticas de nomeação e dicas para otimizar seu código. de dado. O gerador de migrações detecta mudanças na modelagem e cria arquivos prontos para serem executados. - Facilidade de Implantação
Criando seu Primeiro Programa Assíncrono: do Zero ao DeployAprenda a configurar seu ambiente, criar e executar um projeto assíncrono em C# com async/await e prepare o deploy da sua aplicação com segurança.: Em ambientes de produção, basta rodar o passo de aplicação das migrações. Tudo é sistematizado.
O Problema que as Migrations Resolvem🔗
Antes das Migrations, alterar esquemas de banco era como dirigir sem airbag:
- Scripts
🎭 Scripts em C#: Controle Personagens e Física!Aprenda a desenvolver scripts em C# para personagens e integrar física realista em Unity. Um guia passo a passo para iniciantes e devs em transição. SQL manuais propensos a erros - Dificuldade em manter consistência entre ambientes
- Risco de perda de dados em alterações complexas
- Versionamento
🤝 GitHub Básico: Versionamento para Iniciantes!Descubra como o GitHub facilita colaboração, versionamento e organização de código com este tutorial prático e essencial para desenvolvedores iniciantes. caótico das mudanças
Exemplo real: Adicionar
📦 List<T>: Dinamismo além dos Arrays!Descubra como utilizar List<T> em C# de forma eficiente. Aprenda a criar, manipular e otimizar listas para diferentes cenários com exemplos práticos. uma coluna DataNascimento na tabela Clientes sem dropar a tabela.
Como Funciona o Processo de Migrations🔗
A lógica básica envolve três etapas:
1. Detecção de Mudanças: Quando você altera sua modelagem (por exemplo, adiciona uma propriedade
⚡ Propriedades: Get e Set com Elegância (e sem Campos Privados Bagunçados)!Aprenda como utilizar propriedades em C# para encapsular dados, validar informações e manter um código organizado, seguro e de fácil manutenção. em uma classe), a ferramenta de migração detecta a diferença em relação ao banco atual.
2. Criação da Migration: A ferramenta gera um arquivo (ou classe
🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara.) de migração com instruções Up e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. Down.
- Up: o que será feito no banco para
🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! refletir as mudanças. - Down: o que fazer para
🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! reverter caso seja necessário.
3. Aplicação da Migration: Você executa o comando
🔍 Comandos: Desacople Ações dos Botões!Aprenda a implementar comandos em C# para desacoplar lógica e interface usando MVVM, com exemplos práticos e dicas para melhor testabilidade e manutenção. para efetivamente alterar o banco.
O nome e a forma de cada comando
🔍 Comandos: Desacople Ações dos Botões!Aprenda a implementar comandos em C# para desacoplar lógica e interface usando MVVM, com exemplos práticos e dicas para melhor testabilidade e manutenção. podem variar um pouco dependendo do seu ambiente, mas a essência é sempre a mesma.
Como o EF Core Gerencia as Migrations?🔗
O Entity Framework Core
🌍 Projeto: API de E-Commerce com ASP.NET Core e SQL Server!Aprenda a construir uma API robusta para e-commerce com ASP.NET Core, EF Core, JWT e Swagger, validando suas habilidades em um projeto prático real. utiliza um snapshot do modelo atual para comparar com o banco de dados
Conceitos fundamentais de NoSQL: bases para trabalhar com MongoDB em C#Descubra os fundamentos do NoSQL e aprenda como utilizar MongoDB com C# para desenvolver aplicações .NET escaláveis e modernas até 2025. e gerar as migrações necessárias.
// Snapshot do modelo atual
modelBuilder.Entity("Cliente", b =>
{
b.Property<int>("Id");
b.Property<string>("Nome");
// ...
});
1. Snapshot do Modelo
🎭 MVVM: Separe Regras de Negócio da Interface Graficamente!Descubra como o padrão MVVM separa a interface e a lógica de negócio, facilitando testes e manutenção, com exemplos e dicas práticas para seu projeto.: Foto do estado atual das entidades.
2. Geração de Migrations: Compara snapshots para criar scripts
🎭 Scripts em C#: Controle Personagens e Física!Aprenda a desenvolver scripts em C# para personagens e integrar física realista em Unity. Um guia passo a passo para iniciantes e devs em transição. SQL.
3. Versionamento
🤝 GitHub Básico: Versionamento para Iniciantes!Descubra como o GitHub facilita colaboração, versionamento e organização de código com este tutorial prático e essencial para desenvolvedores iniciantes.: Cada migration é um arquivo.cs com Up() e
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. Down().
Criando e Aplicando Migrations Passo a Passo🔗
A seguir, um fluxo bem resumido de como isso pode ocorrer no dia a dia:
# 1. Detectar mudanças e criar uma nova migration:
dotnet ef migrations add AdicionaColunaTelefone --context MeuDbContext
# 2. Aplicar a migração no banco de dados:
dotnet ef database update --context MeuDbContext
- No passo 1, estamos criando a migration
AdicionaColunaTelefone, que vai refletir a adição
🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!Aprenda a dominar operadores aritméticos em C# com exemplos práticos, técnicas de cálculo e dicas para evitar erros e maximizar resultados. de uma nova coluna. - No passo 2, o comando
🔍 Comandos: Desacople Ações dos Botões!Aprenda a implementar comandos em C# para desacoplar lógica e interface usando MVVM, com exemplos práticos e dicas para melhor testabilidade e manutenção. efetiva as alterações no banco.
Se, por algum motivo, você quiser desfazer a última migração (por exemplo, antes de aplicar em produção), existe a possibilidade de rodar algo como dotnet ef migrations remove. Isso remove
📦 List<T>: Dinamismo além dos Arrays!Descubra como utilizar List<T> em C# de forma eficiente. Aprenda a criar, manipular e otimizar listas para diferentes cenários com exemplos práticos.
📦 List<T>: Dinamismo além dos Arrays!Descubra como utilizar List<T> em C# de forma eficiente. Aprenda a criar, manipular e otimizar listas para diferentes cenários com exemplos práticos. o arquivo de migração criado, caso ele ainda não tenha sido aplicado no banco.
Evoluindo o Banco sem Perder Dados🔗
A grande preocupação ao modificar o esquema é não perder dados existentes. Algumas dicas
🔢 Operadores Aritméticos: Faça Cálculos como uma Calculadora Humana!Aprenda a dominar operadores aritméticos em C# com exemplos práticos, técnicas de cálculo e dicas para evitar erros e maximizar resultados. para isso:
- Adicione Novas Colunas como NULLable: Se você precisa de uma nova coluna, pode criá-la permitindo valores
🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. nulos caso não saiba o que colocar nos registros antigos. - Defina Valores
🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. Default: Se a coluna precisa de um valor
🗂️ Dicionários: Acesse Dados por Chaves como um Mestre dos HashMaps!Aprenda a usar dicionários em C# de modo prático e eficiente. Nosso tutorial mostra criação, acesso e otimização para manipular dados com segurança., definir um default evita falhas na atualização. - Evite Drop de Colunas sem Prevenir: Sempre faça backup ou garanta que as informações não serão mais necessárias antes de remover
📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. alguma coluna. - Considere Scripts
🎭 Scripts em C#: Controle Personagens e Física!Aprenda a desenvolver scripts em C# para personagens e integrar física realista em Unity. Um guia passo a passo para iniciantes e devs em transição. de Migração Personalizados: Quando
📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. precisar transferir dados de uma coluna para outra, você pode escrever lógica customizada na seção Up da migration para
🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! não perder dados na transição.
Exemplo de um trecho que atualiza dados durante uma migração (trecho Up):
using Microsoft.EntityFrameworkCore.Migrations;
public partial class AdicionaPhoneComValorDefault : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
// Adiciona a coluna Phone com valor default
migrationBuilder.AddColumn<string>(
name: "Phone",
table: "Usuarios",
nullable: true
);
// Exemplo: Preencha com um valor padrão (se necessário)
migrationBuilder.Sql("UPDATE Usuarios SET Phone = 'N/A' WHERE Phone IS NULL");
}
protected override void Down(MigrationBuilder migrationBuilder)
{
// Remove a coluna caso seja preciso um rollback
migrationBuilder.DropColumn(name: "Phone", table: "Usuarios");
}
}
Esse tipo
🧠 Variáveis em C#: Onde os Dados Ganham Vida (e Nome!)Descubra como as variáveis em C# funcionam, com exemplos do mundo real, boas práticas de nomeação e dicas para otimizar seu código. de abordagem permite deixar a migração “inteligente” o bastante para lidar com dados pré-existentes.
Modificações Incrementais🔗
Cenário: Adicionar
📦 List<T>: Dinamismo além dos Arrays!Descubra como utilizar List<T> em C# de forma eficiente. Aprenda a criar, manipular e otimizar listas para diferentes cenários com exemplos práticos. email ao Cliente
public class Cliente
{
public int Id { get; set; }
public string Nome { get; set; }
public string Email { get; set; } // Nova propriedade
}
dotnet ef migrations add AdicionaEmailCliente
dotnet ef database update
Migration gerada:
migrationBuilder.AddColumn<string>(
name: "Email",
table: "Clientes",
nullable: true);
Rollback de Migrations🔗
dotnet ef database update Inicial # Volta para a versão Inicial
dotnet ef migrations remove # Remove a última migration não aplicada
Importante: Rollbacks
🚀 Kubernetes: Orquestração de Microservices na Nuvem!Descubra como Kubernetes revoluciona o gerenciamento de microsserviços na nuvem, garantindo escalabilidade, automação e alta disponibilidade. em produção requerem backup! Dados podem ser afetados.
Migrações em Produção🔗
Estratégias seguras:
dotnet ef migrations script --output migration.sql # Gera script para DBA aprovar
Ferramentas complementares:
- DbUp (para
🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! controle mais granular) - CI/CD pipelines
Operações de agregação e pipelines: extraindo insights dos dadosAprenda detalhadamente como utilizar operações de agregação no MongoDB com C#. Descubra dicas, estágios e práticas para extrair insights valiosos. com etapas de migração - Azure DevOps Deployment
🚀 Kubernetes: Orquestração de Microservices na Nuvem!Descubra como Kubernetes revoluciona o gerenciamento de microsserviços na nuvem, garantindo escalabilidade, automação e alta disponibilidade. Gates
Boas Práticas e Dicas Úteis🔗
1. Uma Mudança por Migração: Evite englobar diversas alterações em uma única migration, pois dificulta o processo de revisão e rollback
Melhores práticas para atualização e rollback de serviços Native AOTAtualize serviços com eficiência usando Native AOT. Adote deploys paralelos, rollback rápido e saúde monitorada para alta performance..
2. Nomeclatura Clara: Dê nomes descritivos como AdicionaColunaTelefone, RemoveTabelaAntiga, facilitando o entendimento por outros desenvolvedores.
3. Versões de Banco Bem Definidas: Mantenha um histórico claro de quais migrações já foram aplicadas em cada ambiente (desenvolvimento, homologação, produção).
4. Testar Antes de Produção: Sempre aplique a migração em um banco de teste para
🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! garantir que tudo ocorre como planejado.
5. Backup é seu Melhor Amigo: Antes de rodar grandes alterações, sempre faça backup do banco para
🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! ter um ponto de restauração.
Desafio Prático🔗
Objetivo: Migrar uma coluna TipoCliente de string
📝 Strings em C#: Manipule Textos como um Mestre dos Caracteres!Aprenda a dominar os segredos das strings em C# com técnicas de manipulação, concatenação, interpolação e boas práticas, impulsionando sua performance. para enum sem perder dados.
Passos:
2. Adicionar
📦 List<T>: Dinamismo além dos Arrays!Descubra como utilizar List<T> em C# de forma eficiente. Aprenda a criar, manipular e otimizar listas para diferentes cenários com exemplos práticos. nova coluna TipoClienteId
3. Migration com SQL raw
📊 Raw SQL no EF Core: Quando o ORM Não Basta!Descubra como aplicar Raw SQL no EF Core para consultas avançadas e stored procedures, garantindo performance, segurança e mapeamento preciso dos dados. para popular a nova coluna
Exemplo de migration:
migrationBuilder.Sql(
@"UPDATE Clientes
SET TipoClienteId = CASE
WHEN TipoCliente = 'Premium' THEN 1
ELSE 0 END");
Erros Comuns (e Como Evitá-los)🔗
| Erro | Solução |
|---|---|
| Migration aplicada em dev sem commit | Usar dotnet ef migrations script para sincronizar |
| Conflitos de merge no Snapshot | Resolver manualmente com diff tools |
| Esquecer de atualizar o modelo | Sempre rodar testes após Add-Migration |
Pro Tip: Para sistemas legados
Performance Tuning de Consultas LINQ em Sistemas LegadosDescubra como otimizar consultas LINQ em sistemas legados com técnicas práticas que melhoram a performance sem grandes reescritas. (.NET Framework), as Migrations funcionam de forma similar no EF6, mas os comandos são via Package Manager Console.
Conclusão🔗
Com migrations, você ganha agilidade e segurança na hora de evoluir o banco de dados
Conceitos fundamentais de NoSQL: bases para trabalhar com MongoDB em C#Descubra os fundamentos do NoSQL e aprenda como utilizar MongoDB com C# para desenvolver aplicações .NET escaláveis e modernas até 2025. da sua aplicação. A possibilidade de documentar cada mudança, aplicar em múltiplos ambientes e reverter rapidamente torna esse processo muito mais confiável do que mexer diretamente no SQL. Lembre-se: sempre realize testes e mantenha boas práticas para evitar sustos em produção. Assim, você garante que a evolução do banco acompanhando o crescimento do projeto não seja mais um problema, mas sim uma grande facilidade!
Migrations são sua ponte segura
🛡️ Segurança em SignalR: Autenticação e Autorização!Descubra como implementar JWT e autorização com roles e claims no SignalR, garantindo segurança e controle de acessos em tempo real. entre modelos de dados e evolução do sistema. Domine esse recurso
📡 RESTful 101: Princípios que Todo Dev API Precisa Saber!Descubra os fundamentos do REST e boas práticas para criar APIs simples, escaláveis e eficientes. Domine métodos HTTP e status codes com exemplos práticos. e diga adeus aos pesadelos de alteração de esquemas! 🚀
Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.
Referências🔗
- .NET Documentation: learn.microsoft.com/pt-br/dotnet/
- Awesome .NET: github.com/quozd/awesome-dotnet
- C# Language Specification: learn.microsoft.com/pt-br/dotnet/csharp/language-reference/language-specification/
- GitHub: Microsoft/.NET: github.com/dotnet
- Microsoft Learn: C# e .NET: learn.microsoft.com/pt-br/dotnet/csharp/
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 11 months atrás
há 11 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás
há 10 months atrás