gpt4 book ai didi

c# - 使用 Dapper 的 SQLite。分析列时出错。无法将 System.Int64 类型的对象转换为 System.Double 类型

转载 作者:太空狗 更新时间:2023-10-30 01:31:44 24 4
gpt4 key购买 nike

我正在使用 fastcrud 和 dapper 将我的查询结果映射到我的自定义类型。我调查了 dapper 库,得出的结论是我认为这是 Microsoft.Data.Sqlite 包的问题。不确定它是否必须在那里修复,但这就是问题所在。

在解析查询结果中的每一行之前,Dapper 使用 SqliteDataReader 类中的 GetFieldType 方法来获取正确的列类型。

想象下表:

Id | MinTemp | MaxTemp

1 | 10.5 | 18.2

2 | 10.6 | 20

sqlitedatareader.GetFieldType 方法将为您提供以下类型:

System.Int64 用于 Id 和 System.Double 用于 MinTemp 和 MaxTemp这似乎是正确的,但是当它解析结果时,第 2 行出现以下错误

解析第 10 列时出错(MaxTemp=20 - Int64)无法将“System.Int64”类型的对象转换为类型“System.Double”。

由于 dynamic type system of SQLite ,它将第 2 行的 MaxTemp 类型更改为 System.Int64。但是因为dapper定义了MaxTemp的类型为double所以导致了上面提到的错误。

如果我将 sqlite 数据库中的 MaxTemp 值更改为 20.00001,问题就解决了,但这是不正确的。

用过的包:"Microsoft.Data.Sqlite": "1.0.0"

有人知道怎么解决这个问题吗?

最佳答案

这似乎是 Dapper 中的错误/缺陷:

https://github.com/StackExchange/Dapper/issues/642

因为 SQLite 使用值关联,所以示例第二行中的值 20 被视为 INT。 (即使它按字面意思插入为 '20.0''20.00' 等)

显然 Dapper 无法单独处理为每个单独字段返回的不同类型。

解决此问题的方法似乎是使用 SQL CAST()。示例:

SELECT CAST(field123 AS REAL) AS field123 FROM ...

这似乎可以绕过这个错误。

关于c# - 使用 Dapper 的 SQLite。分析列时出错。无法将 System.Int64 类型的对象转换为 System.Double 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39980840/

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