所以我研究了 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”调用,它会成功找到项目。