Как генерировать идентификаторы с помощью NHibernate и Firebird?
-
03-07-2019 - |
Вопрос
Я пытаюсь вставить несколько новых объектов в базу данных Firebird с помощью NHibernate. Р>
Я получил ошибку "не удалось получить следующее значение последовательности [SQL: SQL недоступен]"
Вот отображение, которое я использую в настоящее время. Примечание. ANML_EVNT - это имя генератора, который я хочу использовать.
<id name="Id" column="ID" type="integer">
<generator class="sequence">
<param name="sequence">ANML_EVNT></param>
</generator>
</id>
Решение
Если вы все еще ищете ответ, вот как я успешно его использовал.
Я использую " нативную " генератор, потому что при добавлении поддержки SQL Server в нашу программу единственное, что мне пришлось изменить в NHibernate, - это типы генераторов на «родной»; потому что Firebird и SQL Server реализуют свою «автоматически возрастающую идентичность» колонки по разному. В Firebird он использовал именованный генератор, а в SQL Server он игнорирует «последовательность» параметр и использует встроенный автоинкремент.
Вот пример того, о чем я говорю:
<id name="Id" column="ID">
<generator class="native">
<param name="sequence">ANML_EVNT</param>
</generator>
</id>
После всего сказанного, как ответил gcores, все, что кажется неправильным в вашей конфигурации, это дополнительный " > " после ANML_EVNT.
Другие советы
Это выглядит хорошо. Проблема не в конце скобки после ANML_EVNT, верно? Р>
<id name="Id" column="ID" type="integer">
<generator class="sequence">
<param name="sequence">ANML_EVNT</param>
</generator>
</id>