Entity Framework es un Object-Relational Mapping (ORM) desarrollado por Microsoft como parte de su plataforma de tecnologías .NET.
El objetivo principal de Entity Framework (EF) es simplificar el acceso a bases de datos relacionales mediante la abstracción de la lógica de acceso a datos.
Es decir, que en lugar de escribir consultas SQL “a manopla”, con Entity Framework podemos trabajar con la base de datos con código C# directamente.
Entity Framework se encargará de hacer todo el trabajo pesado en la base de datos por nosotros (como mapear entre entidades de C# y tablas, hacer operaciones CRUD etc).
Con Entity Framework, manejar datos en aplicaciones .NET se vuelve muy sencillo y rápido. Nos permite centrarnos en la lógica de negocio y ser más productivos (lo cuál pondrá muy contento a tu jefe 😏).
Así que vamos a dedicarle este curso a conocer a Entity Framework. Pero antes de profundizar, empecemos por el principio, viendo que es un ORM 👇.
¿Qué es ORM?
Un ORM es una tecnología que mapea objetos de un lenguaje de programación a tablas de una base de datos relacional.
En nuestro caso, Entity Framework es para C#. Pero existen muchos otros ORM para muchos otros lenguajes
En lugar de escribir consultas SQL, podemos interactuar con la base de datos utilizando objetos y métodos proporcionados por el ORM. Esto simplifica el acceso a los datos y reduce la cantidad de código repetitivo.
Es decir, que en lugar de usar una consulta SQL “a pelo” así,
SELECT * FROM Usuarios WHERE Id = 1;
Con un ORM como Entity Framework, podemos escribir:
var usuario = context.Usuarios.Find(1);
Esto no solo hace que el código sea más legible y mantenible, sino que también reduce la probabilidad de errores y acelera el desarrollo.
Enfoques Code-First y Database-First
Entity Framework ofrece dos enfoques distintos para trabajar con bases de datos,
- Code-First: Diseñas las clases en C# y EF genera la base de datos.
- Database-First: Genera clases C# a partir de una BD existente.
Como no podría ser de otra forma, cada enfoque tiene su uso, ventajas y desventajas (Si no que fácil sería elegir ¿no?).
Tener un enfoque u otro es una decisión que tenemos que tomar desde el principio, en cada proyecto que usemos Entity Framework (lo veremos a fondo en su momento).
Características principales de Entity Framework
Entity Framework ofrece una serie de características que lo convierten en una herramienta muy potente e imprescindible en el desarrollo de aplicaciones .NET:
Vamos a ver algunas de estas características
Entity Framework Core utiliza LINQ (Language Integrated Query) como lenguaje principal para interactuar con la base de datos, permitiendo escribir consultas fuertemente tipadas directamente en C#.
var productosCaros = await _context.Productos
.Where(p => p.Precio > 100)
.OrderBy(p => p.Nombre)
.ToListAsync();
Esto no solo es muy cómodo y la legibilidad del código, sino que también previene errores comunes como los de sintaxis SQL, ya que las consultas se validan en tiempo de compilación.
Por ejemplo, al filtrar productos con Where(p => p.Precio > 100)
, EF Core traduce esta expresión a una consulta SQL optimizada como SELECT * FROM Productos WHERE Precio > 100
.
Una de las mayores ventajas de EF Core es su capacidad para trabajar con diversos motores de bases de datos, desde sistemas relacionales como SQL Server, PostgreSQL y MySQL hasta opciones embebidas como SQLite o bases NoSQL como Cosmos DB
Esto se logra mediante un sistema de proveedores de bases de datos (database providers), que adaptan las operaciones de EF Core al dialecto SQL específico de cada motor.
Por ejemplo, el mismo código que usa ToListAsync()
en una aplicación puede ejecutarse sin cambios contra SQL Server o PostgreSQL, simplificando la portabilidad entre entornos.
El mecanismo de seguimiento de cambios de EF Core es rastrea automáticamente las modificaciones en las entidades y genera comandos SQL optimizados al llamar a SaveChangesAsync()
.
var producto = await _context.Productos.FindAsync(1);
producto.Precio = 150; // EF detecta el cambio
await _context.SaveChangesAsync(); // Genera "UPDATE Productos SET Precio = 150 WHERE Id = 1"
Por ejemplo, si modificas el precio de un producto con producto.Precio = 150
, EF Core detecta este cambio y, al guardar, ejecuta únicamente el UPDATE
necesario, sin requerir consultas manuales.
Las migraciones en EF Core son un sistema versionado para gestionar cambios en el esquema de la base de datos sin perder datos existentes.
dotnet ef migrations add "Inicial"
dotnet ef database update
Al crear una migración EF compara el modelo actual de entidades con el anterior y genera scripts SQL incremental (como agregar una columna o crear una tabla). Luego, aplica esos cambios a la BD.
Ventajas de usar Entity Framework
Evidentemente la principal ventaja que ofrece Entity Framework es la velocidad de desarrollo (y otra vez, tu jefe estará muy contento y te dará un ascenso 💰).
Pero además, hay otras ventajas que merece la pena comentar
- Productividad: Reduce la cantidad de código repetitivo y simplifica el acceso a datos.
- Mantenibilidad: El código es más limpio y fácil de entender
- Seguridad: Reduce el riesgo de errores o incluso agujeros de seguridad
- Portabilidad: Es mucho más fácil cambiar de un motor de base de datos a otro.
A lo largo de este curso, iremos viendo sus características, ventajas y mejores prácticas para que puedas sacarle el máximo provecho en tus proyectos. ¡Vamos a ello! 🚀