C# 是否未调用Dapper自定义TypeHandler SetValue?

C# 是否未调用Dapper自定义TypeHandler SetValue?,c#,dapper,typehandler,C#,Dapper,Typehandler,因此,我有一个数据类型,其中包含一些列表,由于我想在表列中将这些数据序列化为Json,我为列表添加了一个简单的TypeHandler: class Foo:SqlMapper.TypeHandler { 公共覆盖无效设置值(IDbDataParameter参数,列表值) { //从不打 抛出新的NotImplementedException(); } 公共覆盖列表解析(对象值) { var val=字符串形式的值; 如果(val!=null) { var list=JsonConvert.Des

因此,我有一个数据类型,其中包含一些
列表
,由于我想在表列中将这些数据序列化为Json,我为
列表
添加了一个简单的TypeHandler:

class Foo:SqlMapper.TypeHandler
{
公共覆盖无效设置值(IDbDataParameter参数,列表值)
{
//从不打
抛出新的NotImplementedException();
}
公共覆盖列表解析(对象值)
{
var val=字符串形式的值;
如果(val!=null)
{
var list=JsonConvert.DeserializeObject(val);
退货清单;
}
抛出新异常(“未知值?”);
}
}
AddTypeHandler(新的Foo());
我试图更新一条记录,但是
SqlMapper.ExecuteCommand
似乎没有调用列表上的SetValue(尽管在读取字段时,正确调用了解析)。相反,它会错误地告诉我,我的sql在“,”附近有一个错误-我以前使用过相同的sql,所以我知道这很好。对于参数,我传递的是
List
类型的属性,而不是在设置参数值时序列化它们。我尝试过修改查询,删除
List
中的所有参数,它可以完美地工作。我还删除了除一个
List
param之外的所有参数,但仍然得到相同的错误,即我的SQL在“,”附近出错

我仔细检查了命令中的数据类型是否确实是
List
,而不是
ICollection
的其他实现,因此应该调用
SetValue

也许值得指出的是,我正在使用SQLite

我做错了什么,还是这是一个错误?我注意到没有答案

更新:我做了很多挖掘工作,认为我可能发现了一个bug——不过我希望有更了解情况的人这样说。我有一个名为Foo的带有两个字符串值的
列表
参数,
SetupCommand
正在尝试将Foo1和Foo2绑定到基础cmd。我假设这是可枚举的内部处理,但我的自定义数据类型不应该具有更高的优先级吗


单步执行后:下面是-此代码下面的
trygetvalue
的简单交换,所有操作都按预期进行-我对列表的处理将取代默认的
可枚举处理。修复?

该漏洞现在已在Dapper.Net中修复
class Foo : SqlMapper.TypeHandler<List<string>>
{
    public override void SetValue(IDbDataParameter parameter, List<string> value)
    {
        // never hit
        throw new NotImplementedException();
    }

    public override List<string> Parse(object value)
    {
        var val = value as string;
        if (val != null)
        {
            var list = JsonConvert.DeserializeObject<List<string>>(val);
            return list;
        }
        throw new Exception("unknown value?");

    }
}

SqlMapper.AddTypeHandler<List<string>>(new Foo());