前言
我使用的是oracle 11版本的数据库,但我使用EF Core 2.1,在使用linq进行分页会生成Oracle 12语法的SQL,在Oracle 11下会运行报错。
在dbcontext下OnConfiguring指定使用Oracle 11版本
optionsBuilder.UseOracle(connectionString,p => p.UseOracleSQLCompatibility("11"));
默认生成12版本的sql
SELECT "p"."KEYID"
FROM "HD_FORM" "p"
WHERE "p"."EAREA" IS NULL
OFFSET :p_0 ROWS FETCH NEXT :p_1 ROWS ONLY
指定版本为11的SQL
Select K0 "KEYID" from(
select "m2".*, rownum r2 from
(
SELECT "p"."KEYID" K0
FROM "HD_FORM" "p"
WHERE ("p"."EAREA" IS NULL )
) "m2"
) "m1"
where r2 > :p_0
and r2 <= (:p_0 + :p_1)
附加 日志输出SQL
1、通过nuget添加引用 Microsoft.Extensions.Logging.Debug
2、在EF的DbContext文件引用
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Debug;
3、日志工厂
public static readonly LoggerFactory MyLoggerFactory = new LoggerFactory(new[] {
new DebugLoggerProvider((category, level) => category == DbLoggerCategory.Database.Command.Name && level >= LogLevel.Information)
});
4、在dbcontext下OnConfiguring添加
optionsBuilder.UseLoggerFactory(MyLoggerFactory);