Dapper.Contrib: ¿cómo obtener los valores de seguimiento de cambios?

.net dapper dapper-contrib

Pregunta

Estoy trabajando en un proyecto .Net usando Dapper como ORM. EF no es realmente una opción, ya que necesitamos que el DB / schema sea algo flexible en el tiempo de ejecución.

Usando Dapper.Contrib podemos usar la función 'cambiar seguimiento' para optimizar lo que se escribe en la base de datos. Lo que realmente nos gustaría es poder acceder a esta información (lo que ha cambiado) y escribirla en un registro de "historial de cambios".

No parece haber mucha documentación en Dapper. Confírmese sobre esto. ¿Alguien tiene alguna sugerencia sobre cómo se podría hacer esto? Gracias.

Respuesta popular

Ok, parece que el 'seguimiento de cambio' de Dapper.Contrib es solo un ayudante de eficiencia (solo escribe SQL para los cambios reales). He usado la reflexión para cargar previamente la estructura del modelo durante el inicio, y luego la utilicé para verificar los cambios entre mis dos versiones del modelo.

Si ayuda a alguien, el código se ve más o menos así (tenga en cuenta que testProps es la lista reflejada de propiedades de clase, DifferenceCompare es un modelo simple para rastrear cambios):

    List<DifferenceCompare> differences = new List<DifferenceCompare>();
        foreach (PropertyInfo property in testProps)
        {
            object value1 = property.GetValue(one, null);
            object value2 = property.GetValue(two, null);
            if (value1 != null && value2 != null)
            {
                if (!value1.Equals(value2))
                {
                    differences.Add(new DifferenceCompare(
                        property.Name.ToString(), 
                        value1.ToString(), 
                        value2.ToString()));
                }
            }
            else if (value1 == null && value2 != null)
            {
                differences.Add(new DifferenceCompare(
                    property.Name.ToString(), "", value2.ToString()));
            }
        }

Gracias a Oskar Kjellin por el punto de partida de esto.



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é