Entity Framework с Firebird выдает динамическую ошибку SQL
Я застрял с FbException
Код ошибки SQL = -104
Токен неизвестен - строка 2, столбец 4
,
при попытке запустить этот код
var result = from x in _context.Bunts
select x;
Я проверил запрос, который был произведен EF
SELECT
"A"."BUNTCODE" AS "BUNTCODE",
"A"."BUNTNAME" AS "BUNTNAME",
"A"."BUNTDIAM" AS "BUNTDIAM"
FROM "BUNTS" AS "A"
Таким образом, сервер считает, что с точкой после оператора "А" что-то не так. Но этот запрос прекрасно работает в IBExpert на той же машине. Как решить эту проблему?
Я использую:
Сервер Firebird v2.1.6.18547
EntityFramework v6.0.0.0
EntityFramework.Firebird v4.5.2.0
FirebirdSql.Data.FirebirdClient 4.5.2.0
1 ответ
Ошибка предполагает, что вы подключаетесь с использованием диалекта 1. Диалект 1 - это старый диалект Interbase 5 и более ранних версий, и его следует считать устаревшим (хотя, к сожалению, 15 лет он все еще поддерживается Firebird...).
На диалекте 1 нельзя заключать в кавычки имена объектов, и для строк используются двойные кавычки (вместо одинарных кавычек в диалекте 3 и стандарте SQL). Когда ваш запрос анализируется на диалекте 1, Firebird видит "A"
в виде строковой константы и следующей точки (.
) не ожидается парсером.
Переключение на диалект 3 должно исправить это, однако, если вы это сделаете, убедитесь, что ваша база данных также является диалектом 3, в противном случае вы можете получить другое непредвиденное поведение, например, некоторые типы данных не работают, или ошибки и т. Д.