标签 Dapper 下的文章

背景

使用Dapper查询数据时,执行到以下代码是,提示错误。

await DbConnection.QueryAsync<MyDto>(sql);

错误信息为:

Error parsing column 0 (NAME=39fb9af0-7a6f-7b2a-26d6-4fe92a2798fc - Object)
System.Data.DataException: Error parsing column 0 (NAME=39fb9af0-7a6f-7b2a-26d6-4fe92a2798fc - Object)
 ---> System.InvalidCastException: Object must implement IConvertible.

但是调试拿到了sql语句,去Navicat下执行,完全没有问题。起初,百度找到了这篇文章,但发现我的问题并非文章中的原因造成的。

原因

该查询中,只查询了两个字段,其中一个为Char(36)类型,通过Dapper查询后转换为了string,本来char转换为string再正常不过。直到后来查询资料发现,Mysql中对Char(36)默认为Guid,但也就是说,你配置了字段类型为Char(36),它代表的意义就已经不是字符串了,转换需要单独处理。

解决

知道问题原因了,就好办了。只需要在查询是将其转换为字符串即可,或者设置转换的类型为Guid。

SELECT CAST(Uid AS CHAR) Name ...

或修改MyDto中的字段类型

...
public Guid Name { get; set; }
...