Persistência real na sua API .NET: parte 1

Persistência real na sua API .NET: parte 1

Preparando o ambiente com PostgreSQL e DBeaver

24 de Março de 2026

Nos artigos anteriores desta série, evoluímos gradualmente nossa aplicação: No primeiro artigo, entendemos os fundamentos do .NET e construímos aplicações simples; No segundo, criamos nossa primeira API funcional com ASP.NET Core; No terceiro, organizamos melhor o código, introduzindo uma camada de serviços e aplicando o padrão de Injeção de Dependência para desacoplar responsabilidades.

Recomendo a leitura dos outros artigos antes de dar sequência aqui, pois esse é uma continuação direta do mesmo projeto!

Chegamos a um ponto muito importante: nossa API já está estruturada e organizada, mas ainda persiste os dados em memória. Para aproximar ainda mais esse projeto de um cenário real de produção, o próximo passo natural e essencial, é integrar a aplicação com um banco de dados real, permitindo que os dados sejam persistidos de forma duradoura.

É importante destacar que o Entity Framework Core é a tecnologia mais utilizada para esse propósito dentro do ecossistema .NET, mas como esse assunto já foi abordado com profundidade no artigo do Charlison (Entity Framework em APIs modernas), recomendo fortemente que você utilize esse artigo como base para compreender os detalhes conceituais do EF Core, como migrations, DbContext, mapeamento de entidades e o fluxo de persistência.

Aqui, vamos focar em aplicar essa integração no contexto do projeto que já construímos ao longo da série, organizando o código para receber o EF Core, criar um banco real e preparar o terreno para evoluções futuras.

Até agora, nossa API utiliza listas em memória para armazenar dados. Isso é suficiente para aprendizagem e protótipos, mas:

  • Não há persistência entre execuções
  • Dados desaparecem ao reiniciar a aplicação
  • Não há concorrência ou integridade de dados
  • Não é escalável

Na maioria das aplicações reais, é fundamental que os dados sejam gravados em um banco de dados que atenda requisitos de durabilidade e consistência. Um e-commerce precisa que os pedidos sobrevivam a reinicializações de servidor. Um sistema de cadastro não pode perder dados entre atualizações. Um painel de gestão precisa de histórico. Tudo isso depende de um banco de dados bem integrado à aplicação.

Integrar uma camada de persistência abre portas para:

  • Trabalhar com bancos SQL e NoSQL
  • Executar migrações de esquema (migrations)
  • Integrar relatórios e dashboards
  • Escalar para arquiteturas distribuídas

Assumindo que você já leu o artigo do Charlison e compreendeu os conceitos de EF Core, vamos agora aplicar isso no seu projeto.

Neste artigo utilizaremos o PostgreSQL como banco de dados. Se você ainda não tem o PostgreSQL instalado, baixe a versão mais recente diretamente em https://www.postgresql.org/download/ e instale com as opções padrão. Durante a instalação, você será solicitado a definir uma senha para o usuário postgres, guarde essa senha, pois vamos precisar dela logo.

O PostgreSQL é um banco de dados relacional open source com décadas de maturidade, adotado amplamente tanto em startups quanto em grandes empresas. Ele oferece excelente performance, suporte robusto a transações, tipos de dados avançados e integração nativa com praticamente todas as linguagens e frameworks modernos, incluindo o .NET via EF Core. É uma escolha sólida para projetos profissionais que precisam de confiabilidade e escalabilidade.

Para gerenciar o banco de dados, vamos utilizar o DBeaver, que é uma ferramenta de administração de banco de dados universal, gratuita e com uma interface muito bem construída. Ela suporta PostgreSQL, SQL Server, MySQL, SQLite e dezenas de outros bancos, o que a torna extremamente útil para quem trabalha em projetos variados. Se você ainda não tem o DBeaver instalado, baixe em https://dbeaver.io/download/.

Com o DBeaver aberto, o primeiro passo é criar uma conexão com o PostgreSQL local. Clique em "Nova Conexão" (ícone de tomada no canto superior esquerdo):

Na janela que abrir, selecione PostgreSQL e clique em "Avançar":

Preencha as configurações de conexão:

  • Host: localhost
  • Porta: 5432
  • Banco de dados: postgres
  • Nome de usuário: postgres
  • Senha: (a senha que você definiu durante a instalação)
OBS: Antes de concluir, há um detalhe importante que merece atenção: por padrão, o DBeaver exibe apenas o banco postgres na árvore de navegação. Se você criar um banco novo e ele não aparecer, é porque a opção "Exibir todos os bancos de dados" não está marcada. Para evitar esse problema, marque a opção, assim todos os bancos criados aparecerão automaticamente na árvore de navegação do DBeaver.

Agora clique em "Testar Conexão" para validar. Se aparecer "Conectado", clique em "Concluir".

Com a conexão criada, agora vamos criar o banco de dados que nossa API vai utilizar. No painel esquerdo, clique com o botão direito sobre a conexão postgres selecione "Criar -> Banco de dados":

Na janela que abrir, preencha o nome do banco como minhaapidb e clique em "Ok":

O banco aparecerá no painel esquerdo do DBeaver. Pronto, o banco está criado e pronto para receber nossas tabelas via migrations.

Banco de dados "minhaapidb" criado

O ambiente está configurado. Temos o PostgreSQL instalado, o DBeaver conectado e o banco minhaapidb criado e pronto para receber dados.

No próximo artigo, vamos conectar o projeto a esse banco: instalaremos os pacotes do EF Core, criaremos o ApplicationDbContext, configuraremos a connection string com segurança, geraremos as migrations e atualizaremos o ProdutoService para persistir dados de verdade, encerrando com um teste completo no Swagger e a confirmação dos dados no DBeaver.

A ideia continua a mesma: evoluir passo a passo, conectando teoria com prática, para que cada conceito faça sentido dentro de um projeto real.

Disponibilizei o projeto de exemplo que usamos aqui no artigo. Você pode baixar direto do GitHub clicando aqui!

Confira mais:

Fique por dentro das novidades

Assine nossa newsletter e receba as últimas atualizações e artigos diretamente em seu email.

Assinar gratuitamente