EF core 指定oracle版本、输出sql日志

前言

我使用的是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);
posted @ 2020-04-14 11:37  Cody&  阅读(597)  评论(0编辑  收藏  举报