c# - Entity Framework Core - Take(1)、Single()、First()...不使用 Oracle Provider (ORA-00933: SQL 命令未正确结束)
问题描述
我在 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 一起工作正常
解决方案
显然,您的目标是不支持较新FETCH FIRST N ROWS ONLY
SQL 结构的较旧 Oracle 数据库。
为了获得较旧ROWNUM
的基于 SQL 的翻译,您应该使用值为“11”的方法和扩展方法的可选Action<OracleDbContextOptionsBuilder> oracleOptionsAction
参数(当前唯一支持的值是“11”和“12”):UseOracle
UseOracleSQLCompatibility
.UseOracle(connection_string, options => options
.UseOracleSQLCompatibility("11"))
推荐阅读
- java - Spring Boot + Security:设置允许的来源时没有 Access-Control-Allow-Origin 标头
- in-app-purchase - Google In App Billing 中的 BillingFlowParams 无法使用真实 sku 开始计费
- reactjs - React Renders 在我的组件底部!没有顶部
- python-3.x - 当我将 DataFrame 保存为 CSV(python3)时,Pandas 更改编号
- command-line-interface - 交互模式没有以正确的方式接收选项
- php - 服务器上的安全 PHP 执行
- node.js - npm test 命令没有运行?
- java - 累加器在并行流中无法正常工作
- go - 如何在 Google Colaboratory 中运行 Go 二进制文件
- python-3.x - 以英语打印当前日期