Dapper e implícita conversión de cadenas a tipos personalizados

c# dapper

Pregunta

Tengo una clase llamada AdviceId que admite conversión implícita a / desde cadenas. También he reemplazado el método ToString () en la clase para garantizar que se devuelve el resultado de cadena correcto siempre que se llame a este método.

Mi aplicación persiste datos usando Dapper. Anteriormente AdviceIds se conservaron y se recuperaron como cadenas, pero ahora he intentado utilizar el tipo específico en su lugar. Sin embargo, esto falla. ¿Hay algún truco especial para decirle a Dapper que use la conversión implícita entre una cadena y mi tipo de IdClic?

ACTUALIZACIÓN He logrado que Dapper inserte una instancia de AdviceId como una cadena agregando un mapa de tipo al SqlMapper

SqlMapper.AddTypeMap(typeof(AdviceId), DbType.String);

y haciendo que AdviceId implemente IConvertible. Sin embargo, no tuve suerte al convertir una cadena, desde el db, a una instancia de AdviceId.

Respuesta popular

Parece que Marc lo agregó en junio de 2014 y puede llamar a AddTypeMap con su propia implementación de SqlMapper.TypeHandler<AdviceId> que encontré a través de este blog, pero Marc también escribió un blog aquí .

public class AdviceIdTypeHandler : SqlMapper.TypeHandler<AdviceId>
{
    public override void SetValue(IDbDataParameter parameter, AdviceId value)
    {
        parameter.Value = value.ToString();
    }

    public override AdviceId Parse(object value)
    {
        return new AdviceId((string)value);
    }
}

SqlMapper.AddTypeHandler(new AdviceIdTypeHandler());


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é