"Массовая вставка" для каскадного списка
У меня есть объект с каскадным списком, который отображается следующим образом:
HasMany(x => x.Products).Cascade.AllDeleteOrphan(); //.BatchSize(10000);
После добавления 20000 товаров в список фиксация занимает более 30 секунд (в то время как максимум 3 секунды).
Что мне нужно, это своего рода объемная вставка. Я мог бы придерживаться этого подхода: ускорить массовые операции вставки с помощью NHibernate. Я знаю, что это решение использует StatelessSession
но в любом случае я надеюсь настроить эти вещи в моем отображении, добавив объекты непосредственно в список в моем Entity
а также NHibernate
заботится об остальном материале. Настройка BatchSize
На отображение списка, похоже, не влияет.
Есть ли способ выполнить эту задачу в приемлемое время?
2 ответа
Я думаю, что размер пакета в отображении связан только с получением. Вы можете попробовать использовать эту конфигурацию в вашей конфигурации nhibernate:
<property name="adonet.batch_size">250</property>
Единственное, чтобы ускорить процесс - использовать сеанс без сохранения состояния.
(прочитайте это: вставки сеанса без сохранения состояния NHibernate идут медленно)
Кроме того, позаботьтесь о том, чтобы сделать это еще быстрее
cfg.AutoCommentSql = false;
cfg.LogFormattedSql = false;