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

时间:2014-05-06 18:28:48

标签: c# dapper

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

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

更新 我已经设法让Dapper通过向SqlMapper添加类型映射来将AdviceId实例作为字符串插入

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

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

1 个答案:

答案 0 :(得分:5)

看起来Marc添加了in June 2014,您可以使用我自己AddTypeMap的{​​{1}}实施来调用SqlMapper.TypeHandler<AdviceId>,但我发现this blog但是Marc还发布了here

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