Chcę przyspieszyć operacje masowe insert
przy pomocy NHibernate 3.2 na Oracle 11g. Aby to zrobić, próbowałemPrzyspieszenie operacji wstawiania zbiorczego za pomocą NHibernate
Session.Save(entity);
Session.Flush();
Session.Clear();
... w moim foreach
pętli ale dostał wyjątek wyrządzone przez obiekty brakujących w sesji:
udało się leniwie zainicjować kolekcję rola MyClass.PropertyX, no sesji lub sesja została zamknięta
Kolejną próbą było ustawić wielkość wsadu:
<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>
dodatkowo ustawić Session.SetBatchSize(50)
w moim kodu uzyskałem następujący wyjątek:
Nie wielkość partii został zdefiniowany dla fabryki sesji, Składowanie jest wyłączone. Ustaw adonet.batch_size = 1, aby włączyć grupowanie.
Jedynym miejscem, w którym ten wyjątek został zgłoszony, jest NonBatchingBatcher, więc wygląda na to, że moja sesja ma nieprawidłowy batcher.
Co jest nie tak? Jak mogę przyspieszyć wstawianie wsadowe z NHibernate (bez korzystania z sesji statlese)?
Dokładnie co było twoim pierwszym wyjątkiem? Ponadto, jeśli wykonasz 'Flush' * w pętli *, nie będziesz niczego grupować. –
@Diego Mijelshon dodał wiadomość wyjątku – deamon
@deamon jest to wielowątkowe w jakikolwiek sposób? – Newbie