TinyInt的精巧转换

时间:2012-01-12 04:27:40

标签: c# mysql asp.net-mvc-3 mvc-mini-profiler dapper

我正在尝试为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中存储关卡,以便解决转换问题吗?

1 个答案:

答案 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正如预期的那样工作..希望可以向山姆请求拉请求:)