前言 我使用的是oracle 11版本的資料庫,但我使用EF Core 2.1,在使用linq進行分頁會生成Oracle 12語法的SQL,在Oracle 11下會運行報錯。 在dbcontext下OnConfiguring指定使用Oracle 11版本 預設生成12版本的sql 指定版本為11的S ...
前言
我使用的是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);