Я использую ef core (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
есть способ это исправить? правильный способ - получить первую строку с
AND rownum = 1
нет
FETCH FIRST 1 ROWS ONLY
и .ToList() отлично работает с IQueryable
@PauloCampez да, и так пробовал FirstOrDefault и не работал





Очевидно, вы ориентируетесь на более старую базу данных Oracle, которая не поддерживает более новую конструкцию FETCH FIRST N ROWS ONLY SQL.
Чтобы получить более старый перевод SQL на основе ROWNUM, вы должны использовать необязательный параметр Action<OracleDbContextOptionsBuilder> oracleOptionsAction метода UseOracle и метод расширения UseOracleSQLCompatibility со значением «11» (в настоящее время поддерживаются только значения «11» и «12»):
.UseOracle(connection_string, options => options
.UseOracleSQLCompatibility("11"))
Есть ли поддержка Oracle 10? Я пытаюсь заставить Entity Framework Core работать с Oracle 10, но безуспешно.
@EdsonRodrigues Согласно странице Поставщики базовых баз данных EF, Oracle.EntityFrameworkCore поддерживает механизмы баз данных Oracle DB 11.2 и выше. На странице также показан провайдер от DevArt, поддерживающий Oracle DB 9.2.0.4 и выше, но это платный продукт.
Вы пытались использовать .First()?