Borrado Suave en Entity Framework Core 2.0

En esta entrada vamos a examinar cómo sobreescribir el método SaveChanges de la clase DbContext para poder implementar un borrado suave en Entity Framework Core 2.0

Borrado suave significa que, en vez de borrar registros de una base de datos, vas a “marcarlos” como borrados. Esto se puede lograr teniendo algún tipo de columna “EstaBorrado” y asignándole el valor de verdadero.

Queremos que cada vez que intentemos borrar una entidad que tenga la columna “EstaBorrado”, se actualice el valor de dicha columna y el registro no se borre de la base de datos.

Ejemplo

Una manera de hacer esto es sobreescribiendo el método SaveChanges, así:


public override int SaveChanges()
 {
 // Borrado Suave
    foreach (var item in ChangeTracker.Entries()
     .Where(e => e.State == EntityState.Deleted &&
     e.Metadata.GetProperties().Any(x => x.Name == "EstaBorrado")))
 {
       item.State = EntityState.Unchanged;
       item.CurrentValues["EstaBorrado"] = true;
 }

    return base.SaveChanges();
 }

Tienes que colocar este código en la clase de tu proyecto que hereda de DbContext.

Así, ahora cuando tengas una entidad o modelo que tiene la propiedad EstaBorrado, entonces automáticamente va a tener la funcionalidad de borrado suave. Ejemplo:


class Student
{
   public int Id { get; set; }
   public string Nombre{ get; set; }
   public int Edad{ get; set; }
   public bool EstaBorrado{ get; set; }
}

Si no quieres usar borrado suave en un modelo, entonces simplemente no le agregues la columna EstaBorrado.

Resumen

Con el borrado suave tú no borras entidades, sino que actualizas una columna la que indica que la entidad ha sido borrada. Así que actualizas en vez de borrar. Puedes usar esto para evitar borrar data que quizás quieras usar luego. Sobreescribe el método SaveChanges para lograr esto igual que como lo hicimos en esta entrada.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s