Я хочу ускорить массовые insert
операции с NHibernate 3.2 в Oracle 11g. Для этого я попытался
Session.Save(entity);
Session.Flush();
Session.Clear();
... в моем цикле foreach
, но возникла исключительная ситуация, вызванная отсутствием объектов в сеансе:
не удалось лениво инициализировать коллекцию ролей: MyClass.PropertyX, ни один сеанс или сеанс не был закрыт
Еще одна попытка была установить размер пакета:
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="connection.driver_class">NHibernate.Driver.OracleClientDriver</property>
<property name="connection.connection_string">xxx</property>
<property name="dialect">NHibernate.Dialect.Oracle10gDialect</property>
<property name="adonet.batch_size">50</property>
<property name="query.substitutions">true=1, false=0</property>
<property name="proxyfactory.factory_class">NHibernate.Bytecode.DefaultProxyFactoryFactory, NHibernate</property>
</session-factory>
</hibernate-configuration>
дополнительно я установил Session.SetBatchSize(50)
в своем коде и получил следующее исключение:
Для фабрики сеансов не определен размер пакета, пакет
отключен. Установите adonet.batch_size = 1, чтобы включить пакетирование.
Единственное место, где выбрасывается это исключение: NonBatchingBatcher , поэтому похоже, что в моем сеансе неправильный дозатор.
Что здесь не так? Как ускорить пакетную вставку с помощью NHibernate (без использования статических сеансов)?