我正在将ef core(2.2.4)与oracle数据库一起使用
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 rownum = 1
不是
仅获取第一行
和.ToList()与IQueryable配合使用
答案 0 :(得分:3)
显然,您的目标是不支持较新的FETCH FIRST N ROWS ONLY
SQL构造的Oracle数据库。
为了获得较旧的基于ROWNUM
的SQL转换,您应该使用Action<OracleDbContextOptionsBuilder> oracleOptionsAction
方法的可选UseOracle
参数和UseOracleSQLCompatibility
扩展方法,其值为“ 11”(当前仅支持的值为“ 11”和“ 12”):
.UseOracle(connection_string, options => options
.UseOracleSQLCompatibility("11"))