¿Qué es Entity Framework Core?
La mayoría de las aplicaciones web no triviales tienen que ejecutar de forma confiable operaciones en datos, como crear, leer, actualizar y eliminar (CRUD). También tienen que conservar los cambios realizados por estas operaciones entre los reinicios de la aplicación. Aunque hay varias opciones para conservar datos en aplicaciones .NET, Entity Framework (EF) Core es una solución fácil de usar y una excelente opción para muchas aplicaciones .NET.
Información sobre EF Core
EF Core es una tecnología de acceso a datos ligera, extensible, de código abierto y multiplataforma para aplicaciones .NET.
EF Core puede actuar como asignador relacional de objetos, que hace lo siguiente:
- Permitir a los desarrolladores de .NET trabajar con una base de datos mediante objetos .NET.
- Permite prescindir de la mayor parte del código de acceso a datos que normalmente es necesario escribir.
EF Core admite un gran número de bases de datos populares, como SQLite, MySQL, PostgreSQL, Oracle y Microsoft SQL Server.
El modelo
Con EF Core, el acceso a datos se realiza utilizando un modelo. Un modelo se compone de clases de entidad y un objeto de contexto que representa una sesión con la base de datos. Este objeto de contexto permite consultar y guardar datos.
Clase de entidad
En este escenario, va a implementar una API de administración de un negocio de pizzas, por lo que usará una clase de entidad Pizza. Las pizzas del negocio tienen un nombre y una descripción. También necesitan un id. para permitir que la API y la base de datos las identifiquen. La clase de entidad Pizza que va a usar en la aplicación identifica las pizzas:
namespace PizzaStore.Models
{
public class Pizza
{
public int Id { get; set; }
public string? Name { get; set; }
public string? Description { get; set; }
}
}
Clase de contexto
Esta aplicación solo tiene una clase de entidad, pero la mayoría de las aplicaciones tienen varias. La clase de contexto es responsable de consultar y guardar datos en las clases de entidad, así como de crear y administrar la conexión de la base de datos.
Realización de operaciones CRUD con EF Core
Tras configurar EF Core, puede usarlo para realizar operaciones CRUD en las clases de entidad. A continuación, puede desarrollar en clases de C#, delegando las operaciones de base de datos a la clase de contexto. A su vez, los proveedores de bases de datos la traducen al lenguaje de consulta específico de la base de datos. Un ejemplo es SQL para una base de datos relacional. Las consultas siempre se ejecutan en la base de datos, incluso si las entidades devueltas en el resultado ya existen en el contexto.
Consultar datos
El objeto de contexto expone una clase de colección para cada tipo de entidad. En el ejemplo anterior, la clase de contexto expone una colección de objetos Pizza como Pizzas. Dado que tenemos una instancia de la clase de contexto, puede consultar la base de datos para todas las pizzas:
var pizzas = await db.Pizzas.ToListAsync();
Insertar datos
Puede usar el mismo objeto de contexto para insertar una pizza nueva:
await db.pizzas.AddAsync(
new Pizza { ID = 1, Name = "Pepperoni", Description = "The classic pepperoni pizza" });
Eliminación de datos
Las operaciones de eliminación son sencillas. Solo requieren un identificador del elemento que se va a eliminar:
var pizza = await db.pizzas.FindAsync(id);
if (pizza is null)
{
//Handle error
}
db.pizzas.Remove(pizza);
Actualización de datos
De forma similar, puede actualizar una pizza existente:
int id = 1;
var updatepizza = new Pizza { Name = "Pineapple", Description = "Ummmm?" };
var pizza = await db.pizzas.FindAsync(id);
if (pizza is null)
{
//Handle error
}
pizza.Description = updatepizza.Description;
pizza.Name = updatepizza.Name;
await db.SaveChangesAsync();
Uso de la base de datos en memoria de EF Core
EF Core incluye un proveedor de bases de datos en memoria que se puede usar para probar la aplicación. El proveedor de bases de datos en memoria es útil para pruebas y desarrollo, pero no debe usarse en producción. En la unidad siguiente, usará el proveedor de bases de datos en memoria para crear una base de datos y realizar operaciones CRUD en ella.