字符串到自定义类型的简洁和隐式转换

本文关键字:转换 简洁 自定义 类型 字符串 | 更新日期: 2023-09-27 18:02:06

我有一个名为AdviceId的类,它支持与字符串之间的隐式转换。我还重写了该类上的ToString()方法,以确保无论何时调用该方法都返回正确的字符串输出。

我的应用程序使用Dapper保存数据。以前,adviceid是作为字符串持久化和检索的,但现在我尝试使用特定的类型。然而,这失败了。是否有一个特殊的技巧告诉Dapper使用字符串和我的AdviceId类型之间的隐式转换?

我已经设法让Dapper插入一个实例的AdviceId作为一个字符串通过添加一个类型映射到SqlMapper

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

和使AdviceId实现IConvertible。但是,我没有运气将字符串从数据库转换回AdviceId的实例。

字符串到自定义类型的简洁和隐式转换

看起来Marc是在2014年6月添加的,你可以用你自己的SqlMapper.TypeHandler<AdviceId>实现来调用AddTypeHandler,这是我在这个博客上发现的,但Marc也在这里写过博客。

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