为什么dapper将每个数字列作为Int64返回?

MaY*_*YaN 7 .net c# dapper

我有以下查询:

SELECT
  [Person].[Id] AS [Person_Id],
  [Person].[Name] AS [Person_Name],
  [Address].[Id] AS [Address_Id],
  [Address].[Number] AS [Address_Number],
  [Address].[Street] AS [Address_Street],        
FROM [Person]
LEFT JOIN [Address] ON [Person].[addressId] = [Address].[Id]
Run Code Online (Sandbox Code Playgroud)

其中用于查询SQLite内存数据库:

var rows = _database.Query(query);
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试读取值时,Int32我得到了InvalidCastException.

foreach (IDictionary<string, object> row in rows)
{
    var someId = (int)row["Person_Id"];
    var someNumber = (int)row["Address_Number"];
}
Run Code Online (Sandbox Code Playgroud)

我这样使用的原因dapper是,作为一个辅助项目,我正在构建一些功能,dapper以将值映射到POCO(我知道类似的项目,例如rainbow,dapper.extensions等).

所以有些东西:

var rowVal = row[fieldName];
propInfo.SetValue(obj, rowVal, null);    
Run Code Online (Sandbox Code Playgroud)

同样,忽略与反射调用相关的性能成本.

在上面的例子中,属性类型POCOint32因为这个问题我无法将值赋给obj.

非常感谢任何帮助或想法.

Ant*_*lev 5

它不是Dapper,而是SQLite.请参阅SQLite版本3中的数据类型(假设您实际使用的是v3):

例如,INTEGER存储类包括6种不同长度的不同整数数据类型.这在磁盘上有所不同.乙UT只要整数值被从磁盘读取并进入存储器进行处理,它们被转换为最一般的数据类型(8字节符号整数).因此,在大多数情况下,"存储类"与"数据类型"无法区分,并且这两个术语可以互换使用.