Entity Framework Core - Take (1), Single (), First () ... не работает с провайдером Oracle (ORA-00933: команда SQL не завершена должным образом) - PullRequest
4 голосов
/ 28 мая 2019

Я использую ядро ​​ef (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

в любом случае это исправить? правильный путь - получить первый ряд с

И rownum = 1

не

ПОЛУЧИТЬ ПЕРВЫЕ 1 СТРОКА ТОЛЬКО

и .ToList () отлично работают с IQueryable

1 Ответ

4 голосов
/ 28 мая 2019

Очевидно, вы нацелены на более старую базу данных Oracle, которая не поддерживает более новую FETCH FIRST N ROWS ONLY конструкцию SQL.

Чтобы получить более старый перевод SQL на основе ROWNUM, вы должны использовать необязательный Action<OracleDbContextOptionsBuilder> oracleOptionsAction параметр UseOracle метода и UseOracleSQLCompatibility метода расширения со значением "11" (в настоящее время поддерживаются только значения "11" и "12"):

.UseOracle(connection_string, options => options
    .UseOracleSQLCompatibility("11"))
...