Introducción a Entity Framework Core en C#
Aprende los fundamentos de Entity Framework Core en C#, incluyendo DbContext y operaciones básicas con bases de datos.
Entity Framework Core (EF Core) es un mapeador objeto–relacional (ORM) dentro del ecosistema .NET, que permite realizar operaciones de base de datos con un enfoque orientado a objetos. Con EF Core, las tablas de la base de datos pueden gestionarse a través de clases C# sin necesidad de escribir consultas SQL directas. En este artículo veremos los conceptos básicos de EF Core: DbContext, definición de entidades y operaciones CRUD básicas. (No entraremos en detalles específicos de MS-SQL, solo en el enfoque general de EF Core).
Ventajas de EF Core
- Enfoque ORM: realizar operaciones de base de datos usando código C# en lugar de SQL.
- Seguridad de tipos: las consultas LINQ se validan en tiempo de compilación.
- Portabilidad: EF Core admite muchos proveedores de bases de datos (SQLite, PostgreSQL, MySQL, etc.).
- Desarrollo Code-First: las tablas de base de datos pueden crearse directamente desde clases C#.
Definir una Entidad
En EF Core, una tabla de base de datos suele representarse con una clase de C#. Las propiedades de la clase se asignan a las columnas de la tabla.
public class Product
{
public int Id { get; set; } // Clave primaria
public string Name { get; set; } = string.Empty;
public decimal Price { get; set; }
}
La clase DbContext
DbContext es el núcleo de EF Core.
Administra la conexión con la base de datos y las operaciones con las tablas.
using Microsoft.EntityFrameworkCore;
public class AppDbContext : DbContext
{
public DbSet<Product> Products { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
// Configurar aquí el proveedor de base de datos
optionsBuilder.UseInMemoryDatabase("TestDb");
}
}
Nota: En este ejemplo se usa InMemoryDatabase para mayor simplicidad.
Operaciones CRUD básicas
Con EF Core, las operaciones Create, Read, Update, Delete se realizan de manera sencilla.
using (var db = new AppDbContext())
{
// CREATE
db.Products.Add(new Product { Name = "Portátil", Price = 1500 });
db.SaveChanges();
// READ
var products = db.Products.ToList();
foreach (var p in products)
Console.WriteLine($"{p.Id} - {p.Name} - {p.Price}");
// UPDATE
var product = db.Products.First();
product.Price = 1400;
db.SaveChanges();
// DELETE
db.Products.Remove(product);
db.SaveChanges();
}
Consultas con LINQ
EF Core se integra perfectamente con LINQ (Language Integrated Query). Esto permite escribir consultas potentes y con seguridad de tipos sin necesidad de SQL directo.
// Seleccionar productos más caros que 1000
using (var db = new AppDbContext())
{
var caros = db.Products
.Where(p => p.Price > 1000)
.OrderBy(p => p.Name);
foreach (var item in caros)
Console.WriteLine(item.Name);
}
El concepto de Migraciones
EF Core ofrece Migraciones para crear o actualizar el esquema de la base de datos directamente desde el código. Los cambios en el código se registran y aplican a la base mediante migraciones.
// Ejemplos de comandos (ejecutar desde la CLI)
// dotnet ef migrations add InitialCreate
// dotnet ef database update
Resumen (TL;DR)
- EF Core simplifica las operaciones de base de datos gracias al enfoque ORM.
DbContext: administra la conexión con la base de datos y las tablas.Entity: clases C# que representan tablas.- CRUD (Crear, Leer, Actualizar, Eliminar) es muy sencillo.
- LINQ permite escribir consultas con seguridad de tipos.
- Migraciones permiten gestionar el esquema de la base directamente desde el código.