Вы должны иметь возможность заполнять базу данных, используя простой SQL, и при этом использовать HiLo для генерации первичных ключей в NHibernate. Что вам нужно сделать, так это установить для значений NextHi в таблице HiLo значения, которые достаточно высоки, чтобы следующая сохраняемая вами сущность получала идентификатор, превышающий максимальный идентификатор, установленный при заполнении базы данных.
Итак, вы должны быть в состоянии сделать что-то вроде этого:
- запустить экспорт схемы
- заполнить базу данных с помощью пользовательского сценария sql (вы должны будете указать свои собственные идентификаторы в сценарии, поскольку они не генерируются базой данных)
- вручную вставить достаточно большое значение в таблицу hibernate_unique_key, чтобы следующий идентификатор, сгенерированный NHibernate, был больше, чем самый большой, вставленный в начальное число
- использовать NHibernate как обычно
Существует несколько разных подходов к использованию HiLo с NHibernate (один разделен следующим-привет для всех объектов, следующий - для каждого объекта и т. Д.), Поэтому вам, возможно, придется немного поэкспериментировать, чтобы выяснить, какие значения было бы целесообразно записать в таблицу hibernate_unique_key после заполнения, в зависимости от вашей стратегии hilo и того, какой max_lo вы используете и т. д.
В качестве примечания: экспорт схемы, похоже, не поддерживает несколько строк в таблице hibernate_unique_key, поэтому вам, возможно, придется выполнить некоторые ручные операции для создания всех строк в таблице, если вы используете строку hilo для каждой сущности.
Вы также можете использовать Identity для генерации идентификаторов, но за счет снижения производительности с NHibernate. Причиной потери производительности является то, что NHibernate должен выполнить дополнительное чтение для каждой вставки, чтобы получить идентификатор, сгенерированный базой данных. С hilo NHibernate уже знает идентификатор, который получит объект, поэтому нет необходимости в дополнительном чтении.
Другим вариантом может быть использование GuidComb , которое также позволяет NHibernate генерировать идентификаторы и, следовательно, устраняет необходимость запрашивать базу данных для получения идентификатора после вставки. Однако при разработке вы должны смотреть на уродливые направляющие, а не на целые числа. :)