我正在尝试为mini-profiler编写自己的DatabaseStorageBase,但遇到了问题

private List<T> LoadFor<T>(DbConnection conn, object idParameter)

方法。 Dapper 一直对我大喊大叫
Error parsing column 5 (level=0 - SByte)

我将级别存储为tinyint(4),因此我假设dapper无法进行从Tiny Int到看起来像枚举(ProfileLevel)的转换?有人可以建议如何将级别存储在mysql中,以便解决转换问题吗?

最佳答案

哇。多么酷的内幕,我也为miniprofiler实现了自己的mysqlstorage并与您发生了类似的错误。

miniprofiler使用枚举作为MiniProfiler.Level和SqlTiming.ExecuteType的字节
使用tinyint数据类型为此属性返回无效的转换,这表明它返回的是Sbyte而不是byte。这种行为是mysql的默认行为,因为它允许返回tinyint的有符号值,其中sqlserver不在这里提及:

http://forums.mysql.com/read.php?38,5524,5581#msg-5581

http://social.msdn.microsoft.com/Forums/br/adonetefx/thread/8b0949ba-03e8-4637-baa1-d2b4ff0771f0

因此,解决方案只需更改level的tinyint字段,然后将executeType更改为无符号的tinyint即可返回正确的值(广播到字节)。现在我的mysqlstorage按预期工作..希望可以问拉请求到山姆:)

关于c# - TinyInt的Dapper转换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8830123/

10-13 09:10