gpt4 book ai didi

c# - TypeHandler 似乎没有被调用

转载 作者:太空狗 更新时间:2023-10-29 19:41:03 27 4
gpt4 key购买 nike

简短版

SqlMapper.Query<T>似乎忽略了我注册的TypeHandler<T>

长版

这是一个简单的查询:

SELECT 'Foo' AS CategoryName, 200 AS CategoryRating

...这是两个 POCO:

public class RatingValue
{
public Int32 Value { get; set; }
// ... some other properties etc ...
}

public class MyResult
{
public String CategoryName { get; set; }
public RatingValue CategoryRating { get; set; }
}

我创建了一个新的 TypeHandler 应该将那个 CategoryRating Int32 的实现进入RatingValue对象:

public class RatingValueHandler: SqlMapper.TypeHandler<RatingValue>
{
public override RatingValue Parse(object value)
{
if (value is Int32)
return new RatingValue() { Value = (Int32)value };

throw new FormatException("Invalid conversion to RatingValue");
}

public override void SetValue(System.Data.IDbDataParameter parameter, RatingValue value)
{
// ... null, range checks etc ...
parameter.DbType = System.Data.DbType.Int32;
parameter.Value = Int32.Parse(value.Value);
}
}

现在,在运行我的查询之前,我要像这样添加我的新处理程序:

SqlMapper.AddTypeHandler<RatingValue>(new RatingValueHandler());

但是,当我运行这个时:

c.Query<MyResult>("SELECT 'Foo' AS CategoryName, 200 AS CategoryRating");

我从 Dapper 收到异常 - 它无法解析第 1 列中的结果。我希望 Dapper 能够触发我的自定义类型处理程序!

我想我遗漏了一些非常非常明显的东西。请告诉我我有多傻!

最佳答案

不是你傻;是我;以下内容现在在本地传递(推送到 github); 将很快部署到 NuGet now available on NuGet在 v1.27 及更高版本中:

public void SO24740733_TestCustomValueHandler()
{
Dapper.SqlMapper.AddTypeHandler(RatingValueHandler.Default);
var foo = connection.Query<MyResult>(
"SELECT 'Foo' AS CategoryName, 200 AS CategoryRating").Single();

foo.CategoryName.IsEqualTo("Foo");
foo.CategoryRating.Value.IsEqualTo(200);
}

public void SO24740733_TestCustomValueSingleColumn()
{
Dapper.SqlMapper.AddTypeHandler(RatingValueHandler.Default);
var foo = connection.Query<RatingValue>(
"SELECT 200 AS CategoryRating").Single();

foo.Value.IsEqualTo(200);
}

关于c# - TypeHandler<T> 似乎没有被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24740733/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com