火鸟和实体框架错误 -804 未知数据类型

本文关键字:-804 未知 数据类型 错误 框架 实体 火鸟 | 更新日期: 2023-09-27 18:35:28

我正在尝试使用此代码从数据库获取特定数据

Bunts = _buntRepository.Bunts
            .Where(b => !steel.HasValue || b.SteelCode == steel)
            .OrderBy(b => b.CreationTime)
            .Skip((page - 1) * _pageSize)
            .Take(_pageSize)

实体框架为其生成以下 SQL 语句:

SELECT FIRST (5) SKIP (0)
"B"."BUNTCODE" AS "BUNTCODE", 
"B"."BUNTNAME" AS "BUNTNAME", 
"B"."BUNTDIAM" AS "BUNTDIAM", 
"B"."BUNTSTEEL" AS "BUNTSTEEL", 
"B"."BUNTCREATETIME" AS "BUNTCREATETIME"
FROM ( SELECT 
"D"."BUNTCODE" AS "BUNTCODE", 
"D"."BUNTNAME" AS "BUNTNAME", 
"D"."BUNTDIAM" AS "BUNTDIAM", 
"D"."BUNTSTEEL" AS "BUNTSTEEL", 
"D"."BUNTCREATETIME" AS "BUNTCREATETIME"
FROM "BUNTS" AS "D"
WHERE (("D"."BUNTSTEEL" = @p__linq__1) OR (("D"."BUNTSTEEL" IS NULL) AND (@p__linq__1 IS NULL)))
)  AS "B"
ORDER BY "B"."BUNTCREATETIME" ASC

此代码引发文本异常

动态 SQL 错误。
SQL 错误代码 = -804。
数据类型未知。

IBExpert也是如此。参数似乎@p__linq__1问题。如何解决此问题?

我正在使用火鸟 2.1.6.18547

火鸟和实体框架错误 -804 未知数据类型

生成的使用@p__linq__1 IS NULL(实际上是作为? IS NULL发送到服务器的),这仅在Firebird 2.5中引入。

为了能够使用它,您需要升级到 Firebird 2.5,或者在代码中而不是在查询中处理steel.HasValue条件,如下所示:

var query _buntRepository.Bunts
if (steel.HasValue) 
{
    query = query.Where(b => b.SteelCode == steel)
}
Bunts = query.OrderBy(b => b.CreationTime)
    .Skip((page - 1) * _pageSize)
    .Take(_pageSize);

注意:以上内容未确认生成的查询(这似乎是一个错误)。如果您希望生成结果,则需要:

if (steel.HasValue) 
{
    query = query.Where(b => b.SteelCode == steel.Value)
}
else 
{
    query = query.Where(b => b.SteelCode == null)
}