aspnet-core-integrar-entity-framework-configuracion

Entity Framework Core en ASP.NET Core: configuración

  • 4 min

Entity Framework Core es el ORM de .NET para trabajar con bases de datos usando clases C#.

Llegamos al momento de persistir datos. Hasta ahora nuestra API era “amnésica”: si reiniciabas el servidor, perdías los datos en memoria.

Para guardar la información vamos a usar el ORM por excelencia de .NET: Entity Framework Core (EF Core).

Hoy aprederemos a configurar el motor para que tu API pueda hablar con la base de datos.

Instalación de paquetes

EF Core es modular. No instalamos un monolito, sino las piezas que necesitamos. Para una API típica con SQL Server, necesitamos instalar estos paquetes NuGet:

El Core:

Microsoft.EntityFrameworkCore

El Proveedor (Driver):

Microsoft.EntityFrameworkCore.SqlServer (para PostgreSQL usaríamos Npgsql.EntityFrameworkCore.PostgreSQL; para SQLite, Microsoft.EntityFrameworkCore.Sqlite).

Las Herramientas (Comandos):

Microsoft.EntityFrameworkCore.Tools (para la consola de administración de paquetes de Visual Studio) o Microsoft.EntityFrameworkCore.Design (para la CLI).

En tu terminal:

dotnet add package Microsoft.EntityFrameworkCore.SqlServer dotnet add package Microsoft.EntityFrameworkCore.Design dotnet tool install —global dotnet-ef

El DbContext

El corazón de EF Core es el DbContext. Es la clase que representa una sesión con la base de datos.

Para integrarlo en ASP.NET, debemos crear una clase que herede de DbContext y, muy importante, tenga un constructor que acepte las opciones de configuración.

using Microsoft.EntityFrameworkCore;

public class ApplicationDbContext : DbContext
{
    // Constructor obligatorio para que funcione la Inyección de Dependencias
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }

    // Tus tablas (DbSets)
    public DbSet<Producto> Productos { get; set; } = null!;
    public DbSet<Usuario> Usuarios { get; set; } = null!;
}
Copied!

La cadena de conexión

Como vimos en el bloque de configuración, nunca escribimos contraseñas ni direcciones IP en el código C#. La cadena de conexión (Connection String) va al archivo de configuración.

Abre appsettings.json y añade la sección ConnectionStrings:

{

“ConnectionStrings”: { “DefaultConnection”: “Server=localhost;Database=MiApiDb;Trusted_Connection=True;TrustServerCertificate=True;” } }

Si usas SQL Server LocalDB (el que viene con Visual Studio), la cadena suele ser: Server=(localdb)\\mssqllocaldb;Database=MiApiDb;Trusted_Connection=True;

Configuración en Program.cs

Ahora tenemos que registrar nuestro ApplicationDbContext en el contenedor de Inyección de Dependencias para poder usarlo en los controladores. EF Core nos proporciona el método de extensión AddDbContext.

// Program.cs

var builder = WebApplication.CreateBuilder(args);

// --- CONFIGURACIÓN DE EF CORE ---
// 1. Leemos la cadena de conexión del JSON
var connectionString = builder.Configuration.GetConnectionString("DefaultConnection")
    ?? throw new InvalidOperationException("Falta ConnectionStrings:DefaultConnection");

// 2. Registramos el contexto usando SQL Server
builder.Services.AddDbContext<ApplicationDbContext>(options =>
{
    options.UseSqlServer(connectionString);
});

var app = builder.Build();
Copied!

Ciclo de vida Scoped

Por defecto, AddDbContext registra el servicio como Scoped. ¿Recuerdas lo que vimos sobre Inyección de Dependencias? Esto significa que se crea una instancia de DbContext por cada petición HTTP. EF abrirá y cerrará conexiones cuando las necesite. Es el comportamiento habitual para bases de datos web.

Aplicar migraciones

Ahora que ASP.NET sabe dónde está la base de datos y cómo conectarse, necesitamos crear las tablas.

Como tenemos instalado el paquete Microsoft.EntityFrameworkCore.Design, podemos usar la CLI de .NET para generar las migraciones (el código SQL para crear la BBDD).

Ejecuta en tu terminal:

Crear la migración inicial (lee tu código C# y prepara el SQL)

dotnet ef migrations add InitialCreate

Aplicar los cambios (conecta a la BBDD y ejecuta el SQL)

dotnet ef database update

Si todo ha ido bien, verás un mensaje de “Done” y tu base de datos habrá sido creada.

En producción conviene revisar o generar el script de migración dentro del proceso de despliegue. Ejecutar migraciones automáticamente al arrancar varias instancias puede provocar carreras y hace más difícil controlar un cambio delicado.

Usar el DbContext en la API

Ya está todo conectado. Ahora, para leer o guardar datos, simplemente inyectamos el contexto en nuestros Endpoints o Controladores.

Ejemplo en Minimal API

app.MapGet("/productos", async (ApplicationDbContext db) =>
{
    // Usamos Entity Framework de forma normal
    return await db.Productos.ToListAsync();
});

app.MapPost("/productos", async (Producto producto, ApplicationDbContext db) =>
{
    db.Productos.Add(producto);
    await db.SaveChangesAsync();
    return Results.Created($"/productos/{producto.Id}", producto);
});
Copied!

Ejemplo en controlador

public class ProductosController : ControllerBase
{
    private readonly ApplicationDbContext _context;

    // Inyectamos el contexto
    public ProductosController(ApplicationDbContext context)
    {
        _context = context;
    }

    [HttpGet]
    public async Task<IActionResult> Get()
    {
        var lista = await _context.Productos.ToListAsync();
        return Ok(lista);
    }
}
Copied!