gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:27:00 27 4
gpt4 key购买 nike

我有以下查询:

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]

它用于查询 SQLite 内存数据库:

var rows = _database.Query(query);

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

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

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

所以类似的东西:

var rowVal = row[fieldName];
propInfo.SetValue(obj, rowVal, null);

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

在上面的示例中,POCO 的属性类型是 int32,由于这个问题,我无法将值分配给 obj

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

最佳答案

它不是 Dapper,它是 SQLite。参见 Datatypes In SQLite Version 3 (假设您实际使用的是 v3):

The INTEGER storage class, for example, includes 6 different integer datatypes of different lengths. This makes a difference on disk. But as soon as INTEGER values are read off of disk and into memory for processing, they are converted to the most general datatype (8-byte signed integer). And so for the most part, "storage class" is indistinguishable from "datatype" and the two terms can be used interchangeably.

关于c# - 为什么 dapper 将每个数字列作为 Int64 返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37534354/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com