Почему nhibernate не позволяет сделать пакетную вставку во время сеанса без сохранения состояния с идентификатором? - PullRequest
1 голос
/ 11 ноября 2019

Я пытаюсь оптимизировать вызовы базы данных из моего кода с помощью пакетной обработки в NHibernate. Я работаю над процессом, который отправляет более 1 тысячи запросов отдельно (я хочу оптимизировать это).

Версия NHibernate - 4.

Основная проблема в том, что я использую тип идентификатора для идентификатора поколения.

Я пытался использовать как сеансы, так и сеансы без сохранения состояния.

Я хотел бы использовать пакетную вставку даже для сопоставления столбцов идентификаторов. Если я работаю с сеансом без сохранения состояния, который не собирает кеш на моих вставках, я не понимаю, почему я не позволяю мне пакетировать свои запросы.

Возможно ли это?

PS Я не хочу использовать SQLBulkCopy. Мои параметры ограничены функциями Nhiberante.

1 Ответ

0 голосов
/ 12 ноября 2019

Возможно ли это?

Пакетная обработка не поддерживается NHibernate, если ключевой столбец идентичен. Это связано с тем, что NHibernate должен выполнить инструкцию INSERT и вернуть сгенерированную (посредством RDBMS) идентичность. Это будет невозможно в случае пакетирования.

Обратите внимание, что NHibernate прозрачно отключает пакетную вставку на уровне ADO, если вы используете генератор идентификатора идентификатора.
Источник

Я не хочу использовать SQLBulkCopy. Мои параметры ограничены функциями Nhiberante.

Массовое копирование SQL - обычно используемая альтернатива для этого сценария, минуя NHibernate;рассмотреть это.

...