Publicada: junio 23 2022

.NET 6.0 - Conexión a la base de datos PostgreSQL con Entity Framework Core

Tutorial creado con .NET 6.0

Esta publicación muestra los pasos para conectar una API de .NET 6 a PostgreSQL usando Entity Framework Core y crear/actualizar automáticamente la base de datos de PostgreSQL desde el código usando migraciones de EF Core.

Comenzaremos con un ejemplo de .NET 6 CRUD API de un tutorial que publiqué recientemente, utiliza el proveedor de base de datos EF Core InMemory de forma predeterminada para las pruebas, lo actualizaremos para conectarse a una base de datos PostgreSQL y ejecute migraciones de EF Core para generar automáticamente la base de datos y las tablas a partir del código. Para obtener detalles completos sobre la API CRUD de .NET, consulte .NET 6.0 - Ejemplo y tutorial de API CRUD.


Contenidos del tutorial


Herramientas necesarias para este tutorial

Para seguir los pasos de este tutorial, necesitará lo siguiente:

  • .NET SDK - incluye las herramientas de línea de comandos y tiempo de ejecución de .NET.
  • Visual Studio Code - editor de código que se ejecuta en Windows, Mac y Linux. Si tiene un editor de código preferido diferente, también está bien.
  • extensión C# para Visual Studio Code - agrega compatibilidad con VS Code para desarrollar aplicaciones .NET.
  • PostgreSQL - necesitará acceso a una instancia de servidor PostgreSQL en ejecución para que la API se conecte, puede ser remota (por ejemplo, Azure, AWS, etc.) o en su máquina local. La página de descargas de PostgreSQL está en https://www.postgresql.org/download/, asegúrese de que esté iniciado para que la API pueda conectarse a él. También puede ejecutarlo en un contenedor Docker, las imágenes oficiales de Docker para Postgres están disponibles en https://hub.docker.com/_/postgres.


Descargar & Ejecute la API de .NET de ejemplo

Siga estos pasos para descargar y ejecutar la API CRUD de .NET 6 en su máquina local con la base de datos EF Core InMemory predeterminada:

  1. Descargue o clone el código del proyecto del tutorial desde https://github.com/cornflourblue/dotnet-6-crud-api
  2. Inicie la API ejecutando dotnet run desde la línea de comando en la carpeta raíz del proyecto (donde se encuentra el archivo WebApi.csproj), debería ver el mensaje Now listening on: http://localhost:4000.
  3. Puede probar la API directamente con una herramienta como Postman o engancharla arriba con el ejemplo aplicación Angular o React disponible.

Comenzando en modo de depuración

También puede iniciar la aplicación en modo de depuración en VS Code abriendo la carpeta raíz del proyecto en VS Code y presionando F5 o seleccionando Depurar -> Inicie la depuración desde el menú superior, ejecutar en modo de depuración le permite adjuntar puntos de interrupción para pausar la ejecución y recorrer el código de la aplicación. Para obtener instrucciones detalladas, incluido un breve video de demostración, consulte VS Code + .NET - Debug a .NET Web App in Visual Studio Code.


Actualice la API de .NET para usar PostgreSQL


Agregar proveedor de base de datos PostgreSQL desde NuGet

Ejecute el siguiente comando desde la carpeta raíz del proyecto para instalar el proveedor de base de datos EF Core para PostgreSQL desde NuGet:

dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL


Agregar cadena de conexión a la configuración de la aplicación

Abra el archivo appsettings.json y agregue la entrada "ConnectionStrings" con una entrada secundaria para la cadena de conexión de PostgreSQL (por ejemplo, "WebApiDatabase"), la cadena de conexión debe tener el formato "Host=[DB SERVER URL]; Database=[DB NAME]; Username=[USERNAME];Password=[PASSWORD]".

Cuando las migraciones de EF Core generan la base de datos, el valor de database será el nombre de la base de datos creada en PostgreSQL.

El archivo appsettings.json actualizado con la cadena de conexión debería verse así:

{
    "ConnectionStrings": {
        "WebApiDatabase": "Host=localhost; Database=dotnet-6-crud-api; Username=postgres; Password=mysecretpassword"
    },
    "Logging": {
        "LogLevel": {
            "Default": "Information",
            "Microsoft.AspNetCore": "Warning"
        }
    }
}


Actualizar contexto de datos para usar PostgreSQL

La clase DataContext ubicada en /Helpers/DataContext.cs se usa para acceder a los datos de la aplicación a través de Entity Framework. Se deriva de la clase DbContext de Entity Framework y tiene una propiedad Users pública para acceder y administrar los datos de los usuarios.

Actualice el método OnConfiguring() para conectarse a PostgreSQL en lugar de una base de datos en memoria reemplazando options.UseInMemoryDatabase("TestDb"); con options.UseNpgsql(Configuration.GetConnectionString("WebApiDatabase"));.

La clase DataContext actualizada debería verse así:

namespace WebApi.Helpers;

using Microsoft.EntityFrameworkCore;
using WebApi.Entities;

public class DataContext : DbContext
{
    protected readonly IConfiguration Configuration;

    public DataContext(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    protected override void OnConfiguring(DbContextOptionsBuilder options)
    {
        // connect to postgres with connection string from app settings
        options.UseNpgsql(Configuration.GetConnectionString("WebApiDatabase"));
    }

    public DbSet<User> Users { get; set; }
}


Cree una base de datos PostgreSQL a partir del código con migraciones de EF Core


Instalar herramientas dotnet ef

Las herramientas de .NET Entity Framework Core (dotnet ef) se utilizan para generar migraciones de EF Core, para instalar las herramientas de EF Core globalmente ejecute dotnet tool install -g dotnet-ef, o para actualizar ejecute dotnet tool update -g dotnet-ef. Para obtener más información sobre las herramientas de EF Core, consulte https://docs.microsoft.com/ef/core/cli/dotnet

Agregue el paquete EF Core Design desde NuGet

Ejecute el siguiente comando desde la carpeta raíz del proyecto para instalar el paquete de diseño de EF Core, proporciona compatibilidad con herramientas de línea de comandos multiplataforma y se usa para generar migraciones de EF Core:

dotnet add package Microsoft.EntityFrameworkCore.Design


Generar migraciones de EF Core

Generar nuevos archivos de migración de EF Core ejecutando el comando dotnet ef migrations add InitialCreate desde la carpeta raíz del proyecto (donde se encuentra el archivo WebApi.csproj), estas migraciones crearán la base de datos y las tablas para la API de .NET Core.

Ejecutar migraciones de EF Core

Ejecute el comando dotnet ef database update desde la carpeta raíz del proyecto para ejecutar las migraciones de EF Core y crear la base de datos y las tablas en PostgreSQL.

Revise Postgres y ahora debería ver su base de datos con las tablas Users y __EFMigrationsHistory.


Reiniciar la API CRUD de .NET 6.0

Detenga y reinicie la API con el comando dotnet run desde la carpeta raíz del proyecto, debería ver el mensaje Now listening on: http://localhost:4000 y la API ahora debería estar conectada a Postgres.

 


Suscríbete o Sígueme para actualizaciones

Suscríbete a mi canal de YouTube o sígueme en Twitter, Facebook o GitHub para recibir notificaciones cuando publique contenido nuevo.

Aparte de la codificación...

Actualmente estoy intentando viajar por Australia en motocicleta con mi esposa Tina en un par de Royal Enfield Himalayan. Puedes seguir nuestras aventuras en YouTube, Instagram y Facebook.


¿Necesita Ayuda .NET?

Buscar fiverr para encontrar ayuda rápidamente de desarrolladores .NET experimentados.