我正在尝试为mini-profiler编写自己的DatabaseStorageBase,而且我遇到了问题
private List<T> LoadFor<T>(DbConnection conn, object idParameter)
方法。 Dapper一直对我大吼大叫
Error parsing column 5 (level=0 - SByte)
我将level存储为tinyint(4)
,所以我假设dapper无法从Tiny Int转换为看起来像Enum( 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改为unsigned tinyint即可返回正确的值(强制转换为byte)。现在我的mysqlstorage按预期工作..希望可以问拉请求到山姆:)