Recortar automáticamente el espacio en blanco de las columnas al mapear con Dapper

ado.net c# dapper

Pregunta

Estoy usando Dapper para acceder a una base de datos heredada y hay espacios en blanco en la columna.

La solución que he encontrado es agregar propiedades como:

private string _status;
public string status 
{
    get { return _status; }
    set { _status = value.Trim(); }
}

Obviamente, esto es tedioso de hacer en cada miembro de cadena de cada modelo que interactúe con esta base de datos. De acuerdo con MSDN Entry en SET ANSI_PADDING , modificar esto a OFF tampoco es una opción.

Como la base de datos no es mía, no puedo cambiarla a nvarchar o simiar.

¿Hay alguna manera fácil de obligar a Dapper a recortar cada columna de cadena que lee de la base de datos?

Respuesta popular

Una forma es escribir un método de extensión y usar la reflexión para recortar todas las propiedades de cadena en la clase. Por ejemplo:

public static class ObjExt
{
    public static void Trim<T>(this T item)
    {
        var properties = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
        foreach (var p in properties)
        {
            if (p.PropertyType != typeof(string) || !p.CanWrite || !p.CanRead) { continue; }
            var value = p.GetValue(item) as string;
            p.SetValue(item,value.Trim());
        }
    }
}


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é