Dapper et conversion implicite des chaînes en types personnalisés

c# dapper

Question

J'ai une classe appelée AdviceId qui prend en charge la conversion implicite vers / depuis des chaînes. J'ai également remplacé la méthode ToString () sur la classe pour garantir que la sortie de chaîne correcte est renvoyée chaque fois que cette méthode est appelée.

Mon application conserve les données à l'aide de Dapper. Auparavant, AdviceIds était persisté et récupéré sous forme de chaînes, mais j'ai maintenant essayé d'utiliser le type spécifique à la place. Cependant, cela échoue. Y a-t-il une astuce spéciale pour dire à Dapper d'utiliser une conversion implicite entre une chaîne et mon type AdviceId?

MISE À JOUR J'ai réussi à obtenir que Dapper insère une instance de AdviceId en tant que chaîne en ajoutant une carte de type à SqlMapper

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

et en faisant en sorte que AdviceId implémente IConvertible. Cependant, je n'ai pas eu de chance de convertir une chaîne, de la base de données, à une instance de AdviceId.

Réponse populaire

Il semble que Marc ait ajouté en juin 2014 et vous pouvez appeler AddTypeMap avec votre propre implémentation de SqlMapper.TypeHandler<AdviceId> que j'ai trouvé via ce blog, mais que Marc a également blogué ici .

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());



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi