Entity Framework 7 SaveChanges

entity-framework-core

Pregunta

¿Hay alguna forma de registrar una devolución de llamada que se llamará antes de que un modelo en EF7 se guarde en la base de datos? Lo que quiero hacer es establecer una propiedad ModifiedBy y ModifiedDate que tengo en todos los modelos. No estoy tan interesado en hacer esto manualmente antes de cada guardado, así que estoy buscando una forma más genérica y automática.

Respuesta aceptada

ChangeTracker.Entries() permite obtener todos los cambios de la entidad. Podría anular SaveChanges en su DbContext y establecer las propiedades modificadas utilizando algo como el siguiente código.

public override int SaveChanges()
{
    SetModifiedInformation();
    return base.SaveChanges();
}

public override async Task<int> SaveChangesAsync( CancellationToken cancellationToken = new CancellationToken() )
{
    SetModifiedInformation();
    return await base.SaveChangesAsync( cancellationToken );
}

private void SetModifiedInformation()
{
    foreach (var entityEntry in ChangeTracker.Entries())
    {
        var entity = entityEntry.Entity as ChangeTracking;
        if (entity != null)
        {
            entity.ModifiedBy = "Get User Here";
            entity.ModifiedTime = DateTime.Now;
        }
    }
}



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué