Вы можете установить размер пакета для обновлений в конфигурационном файле nhibernate.
<property name="hibernate.adonet.batch_size">16</property>
И вам не нужно вызывать Session.Update (User) там - просто очистите или зафиксируйте транзакцию, и NHibernate справится с вами.
РЕДАКТИРОВАТЬ: Я собирался опубликовать ссылку на соответствующий раздел документов nhibernate, но сайт не работает - вот старая запись из Ayende на эту тему:
Относительно того, является ли использование NHibernate (или любого ORM) здесь хорошим подходом, это зависит от контекста. Если вы выполняете одноразовое обновление каждой строки в большой таблице с одним значением (например, указание для всех пользователей страны «Антарктида» (это, кстати, континент, а не страна!), То вам, вероятно, следует используйте оператор SQL UPDATE. Если вы собираетесь обновлять несколько записей одновременно со страной как часть вашей бизнес-логики при общем использовании вашего приложения, то использование ORM может быть более разумным методом. Это зависит от количества строк, которые вы обновляете каждый раз.
Пожалуй, самый разумный вариант здесь, если вы не уверены, это настроить параметр batch_size в NHibernate и посмотреть, как это работает. Если производительность системы неприемлема, вы можете взглянуть на реализацию простого SQL-оператора UPDATE в своем коде.