entity-framework-eliminar-registros

Eliminación de datos en Entity Framework

  • 3 min

En Entity Framework, la eliminación de registros es una de las operacionees CRUD fundamentales, y la última que nos falta por ver.

La eliminación de registros implica borrar en la base de datos entidades existentes (obvio,😊) Para ello, Entity Framework proporcionan los métodos Remove y RemoveRange.

Al igual que en el resto de operaciones, cuando eliminamos un registro del DbContext, estas no se ejecutan se ejecutan inmediatamente en la base de datos.

En su lugar, EF los marca para su eliminación. Los cambios se harán efectivos en la base de datos cuando invoquemos al método al método SaveChanges.

Eliminación de registros con Remove

El método Remove se utiliza para eliminar un único registro de la base de datos. Este método marca la entidad como “eliminada” en el contexto,

DbContext.Remove(entity);

Supongamos que tenemos una entidad Producto y queremos eliminar un producto específico de la base de datos:

using (var context = new MiContexto())
{
    // Buscamos el producto a eliminar
    var producto = context.Productos.Find(1); // Supongamos que el ID es 1

    if (producto != null)
    {
        // Marcamos el producto para eliminación
        context.Productos.Remove(producto);

        // Aplicamos los cambios en la base de datos
        context.SaveChanges();
    }
}

En este ejemplo:

  1. Buscamos el producto con ID 1 utilizando el método Find.
  2. Si el producto existe, lo marcamos para eliminación con Remove.
  3. Finalmente, llamamos a SaveChanges para aplicar la eliminación en la base de datos.

Eliminación múltiple con RemoveRange

El método RemoveRange es una extensión de Remove que permite eliminar múltiples registros de una sola vez.

Esto es útil cuando necesitamos eliminar una colección de entidades, ya que reduce el número de operaciones de base de datos.

DbContext.RemoveRange(entities);

Supongamos que queremos eliminar todos los productos que tienen un precio menor a 10:

using (var context = new MiContexto())
{
    // Buscamos los productos a eliminar
    var productosBaratos = context.Productos
                                  .Where(p => p.Precio < 10)
                                  .ToList();

    if (productosBaratos.Any())
    {
        // Marcamos los productos para eliminación
        context.Productos.RemoveRange(productosBaratos);

        // Aplicamos los cambios en la base de datos
        context.SaveChanges();
    }
}

En este ejemplo:

  1. Utilizamos LINQ para filtrar los productos con un precio menor a 10.
  2. Si hay productos que cumplen la condición, los marcamos para eliminación con RemoveRange.
  3. Llamamos a SaveChanges para aplicar la eliminación en la base de datos.

Al igual que AddRange, DeleteRange puede reducir el número de consultas a la base de datos.

Pero no es una operación bulk. Es decir, que el rendimiento sigue siendo mejorable 😅

Casos frecuentes