我正在尝试为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转换为看起来像Enum(ProfileLevel
)的内容?有人可以建议我应该如何在mysql中存储关卡,以便解决转换问题吗?
答案 0 :(得分:2)
哇。多么酷的事实,我也为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改为unsigned tinyint即可返回正确的值(强制转换为byte)。现在我的mysqlstorage正如预期的那样工作..希望可以向山姆请求拉请求:)