18

我在 oracle 数据库中使用 ef core(2.2.4)

oracleProvider:Oracle.EntityFrameworkCore(2.18.0-beta3)

这段代码:

IQueryable<KeyInfo> queryable = context
                .KeyInfos
                .Where(x => x.MobileNumber == "989191111111")
                .Take(1);

生成这个数据库查询:

SELECT "x"."ID", "x"."Key", "x"."MobileNumber", "x"."NationalCode"
FROM "KeyInfo" "x"
WHERE "x"."MobileNumber" = N'989191111111'
FETCH FIRST 1 ROWS ONLY;

运行查询给我这个错误:

ORA-00933: SQL command not properly ended
00933. 00000 -  "SQL command not properly ended"
*Cause:    
*Action:
Error at Line: 4 Column: 1

有什么办法可以解决吗?正确的方法是获得第一行

AND 行数 = 1

不是

仅获取前 1 行

和 .ToList() 与 IQueryable 一起工作正常

4

1 回答 1

49

显然,您的目标是不支持较新FETCH FIRST N ROWS ONLYSQL 结构的较旧 Oracle 数据库。

为了获得较旧ROWNUM的基于 SQL 的翻译,您应该使用值为“11”的方法和扩展方法的可选Action<OracleDbContextOptionsBuilder> oracleOptionsAction参数(当前唯一支持的值是“11”和“12”):UseOracleUseOracleSQLCompatibility

.UseOracle(connection_string, options => options
    .UseOracleSQLCompatibility("11"))
于 2019-05-28T13:16:19.223 回答