Dapper将TinyInt转换

5

我试图为迷你分析器编写自己的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中存储等级以解决我的转换问题吗?


你不需要继承基类,只需实现存储接口即可。 - Sam Saffron
我尝试实现存储接口,但“保存”方法仍要求我保存级别。有没有办法让Dapper从整数值生成枚举?如果没有,看来我只能手动映射它了。 - JesseBuesking
@SamSaffron 我忘记在我的评论中标记你了...我的错。 - JesseBuesking
你能否在Dapper源代码中添加一个失败的枚举测试,以便我可以修复枚举问题? - Sam Saffron
好的,我明白了...ADO适配器中的mysql枚举支持有些问题...嗯,下周我不在,我会在之后的那周跟进,你能否在Dapper错误跟踪器中添加一个工单? - Sam Saffron
显示剩余2条评论
1个回答

3

哇,多么酷的事件,我也为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 和 executeType 的 tinyint 字段更改为无符号 tinyint,并返回正确的值(转换为字节)。现在我的 mysqlstorage 工作正常了。希望能向 sam 提交拉取请求 :)

我会在周末尝试一下并回复结果,但听起来可能是解决我的问题的方案:D - JesseBuesking

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接