将字符串隐式转换为自定义类型

2024-01-10

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

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

UPDATE我已经成功地让 Dapper 通过向 SqlMapper 添加类型映射来插入 AdviceId 的实例作为字符串

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

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


看起来马克补充道2014年6月 https://github.com/StackExchange/dapper-dot-net/commit/e26ee0abe5bdff561ff59fded87cabb9f5d983a1你可以打电话AddTypeHandler与你自己的实现SqlMapper.TypeHandler<AdviceId>我通过发现这个博客 https://andydote.co.uk/2014/07/22/configuring-dapper-to-work-with-custom-types/但马克也写了博客here http://blog.marcgravell.com/2014/07/dapper-gets-type-handlers-and-learns.html.

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());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将字符串隐式转换为自定义类型 的相关文章

随机推荐