Mapa de un Char a un booleano

c# dapper

Pregunta

Estamos utilizando Dapper como ORM a una base de datos Informix heredada, y dentro de esta base de datos los campos booleanos se almacenan realmente como Char, con 'F' que significa False y 'T' que significa Verdadero.

Dentro de nuestro POCO, nos gustaría exponer una sola propiedad booleana e instruir a Dapper para que haga un mapa hacia / desde el valor de char relevante al leer y escribir en la base de datos.

Por ejemplo:

Digamos que tenemos un campo dentro de una tabla llamada "Activo". El valor en la base de datos para la columna Activo será "T" de "F"

Nuestro POCO puede verse más o menos así:

public class MyTable
{
    public bool Active { get; set; }
}

¿Es posible crear una asignación personalizada dentro de Dapper que para esta columna establecería la propiedad Activa en el POCO en verdadero si el valor subyacente es "T" y falso en "F"?

Una forma en que sé que podría evitar esto es tener dos propiedades, una cadena a la que Dapper pueda asignar directamente y otra a una booleana utilizada por los consumidores de POCO. es decir:

public class MyTable
{
    public string Active { get; set; }
    public bool MyActive 
    {
        get { return Active == "T"; }
        set { Active = (value == "T"); }
    }
}

La desventaja de este enfoque es tener que mantener dos propiedades, por lo que sería genial si hay una forma de extender el dapper para que lo haga por mí (especialmente porque hay muchos campos como este dentro de la tabla de nuestra base de datos) .

He analizado la implementación de un mapa de tipos personalizado, pero aunque esto funcionaría para un tipo complejo personalizado, no estoy seguro de cómo funcionaría en esta instancia cuando quiero asignar un tipo básico a otro tipo básico.

Respuesta aceptada

Dudo que Dapper lo apoye, eche un vistazo a la respuesta de esta pregunta relacionada . Como puedes ver, la propiedad Active ni siquiera tiene que ser pública, hazla private para evitar confusiones. Sin embargo, nombraría su propiedad bool IsActive .

public class MyTable
{
    private string Active { get; set; }
    public bool IsActive 
    {
        get { return Active == "T"; }
        set { Active = value ? "T" : "F"; }
    }
}


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é