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, в противном случае вы можете получить другое непредвиденное поведение, например, некоторые типы данных не работают, или ошибки и т. Д.

Другие вопросы по тегам