Я попытался добавить массовую вставку в свое приложение, но Batcher все еще не является BatchingBatcher с размером пакета Batch 1.
Это использует C # 3, NH3RC1 и MySql 5.1
IЯ добавил это в мою SessionFactory
<property name="adonet.batch_size">100</property>
И мой код выглядит примерно так
var session = SessionManager.GetStatelessSession(type);
var tx = session.BeginTransaction();
session.Insert(instance);
Я использую HILO для создания идентификаторов для рассматриваемых экземпляров, но не для всехэкземпляры в базе данных.SessionFactory.OpenStatelessSession не принимает тип, поэтому он не может точно знать, что он может выполнять пакетную обработку для этого типа, или ...?
После некоторого копания в NHibernate я что-то нашел в SettingsFactory.CreateBatcherFactoryэто может дать некоторую дополнительную информацию
// It defaults to the NonBatchingBatcher
System.Type tBatcher = typeof (NonBatchingBatcherFactory);
// Environment.BatchStrategy == "adonet.factory_class", but I haven't
// defined this in my config file
string batcherClass = PropertiesHelper.GetString(Environment.BatchStrategy, properties, null);
if (string.IsNullOrEmpty(batcherClass))
{
if (batchSize > 0)
{
// MySqlDriver doesn't implement IEmbeddedBatcherFactoryProvider,
// so it still uses NonBatchingFactory
IEmbeddedBatcherFactoryProvider ebfp = connectionProvider.Driver as IEmbeddedBatcherFactoryProvider;
Возможно, моя конфигурация неверна?
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2" >
<session-factory name="my application name">
<property name="adonet.batch_size">100</property>
<property name="connection.driver_class">NHibernate.Driver.MySqlDataDriver</property>
<property name="connection.connection_string">my connection string
</property>
<property name="dialect">NHibernate.Dialect.MySQL5Dialect</property>
<property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
<!-- To avoid "The column 'Reserved Word' does not belong to the table : ReservedWords" -->
<property name="hbm2ddl.keywords">none</property>
</session-factory>
</hibernate-configuration>