使用 SqlMapper.RemoveTypeMap 通过 Dapper 将 Guid 映射到字符串会破坏数组值的映射

问题描述 投票:0回答:0

所以我研究了 Guid 到字符串映射,并发现了这个惊人的解决方案帖子:Map string to guid with Dapper

当我在 MariaDb 上测试时,一切似乎都很顺利,但是当针对 SQLServer 数据库进行测试时,某些测试失败了。所有失败的人都有一个共同点:

它们在 SQL 命令中有一个“IN”子句(例如:SELECT * FROM MyTable WHERE Id IN @itemIds),我执行如下查询:

return connection.QueryAsync<T>(sql, new { Id = itemIds });
并且名为“itemIds”类型的变量是一个
IEnumerable<Guid>
.

如果我的初始化方法中有以下几行代码:

SqlMapper.AddTypeHandler(new GuidToStringMapper());
SqlMapper.RemoveTypeMap(typeof(Guid);
SqlMapper.RemoveTypeMap(typeof(Guid?);

它不起作用。

但是如果我只添加

SqlMapper.AddTypeHandler(new GuidToStringMapper());
,它就会按预期工作。

为了明确起见,这两个选项都适用于 MariaDB,但只有第二个选项适用于 SQLServer。

不会引发异常,但使用上面的示例 SQL 命令,它找不到任何项目,并且这些项目确实存在于数据库中,如果我删除“RemoveTypeMap”调用,它会成功找到项目。

c# .net dapper
© www.soinside.com 2019 - 2024. All rights reserved.