我有一个名为AdviceId的类,它支持对字符串的隐式转换。我还重写了类上的ToString()方法,以确保每次调用此方法时都返回正确的字符串输出。
我的应用程序使用Dapper保留数据。以前AdviceIds是作为字符串持久化和检索的,但我现在尝试使用特定类型。但是,这失败了。有没有特别的技巧告诉Dapper在字符串和我的AdviceId类型之间使用隐式转换?
更新 我已经设法让Dapper通过向SqlMapper添加类型映射来将AdviceId实例作为字符串插入
SqlMapper.AddTypeMap(typeof(AdviceId), DbType.String);
并通过使AdviceId实现IConvertible。但是,我没有运气将数据库从数据库转换回AdviceId的实例。
答案 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());