2009-07-20 3 views
4

Я использую NHibernate 2.1.0.4000 в одном из проектов. Я установил adonet.batch_size в в файле cfg однако я все еще вижу, что инструкция insert рассматривается как один оператор. Обновление, похоже, работает нормально. Что происходит?NHibernate 2.1.0.4000 не похоже на пакетную вставку

Обновлено: Это потому, что я выбрал идентификатор как первичный генератор ключей?

<id name="Id" column="Id" unsaved-value="0" type="Int32"> 
    <generator class ="identity"></generator> 
</id> 
+0

Я нашел это (http://groups.google.com/group/nhusers/browse_thread/thread/d4c8fd9625ef5f32/55c7a8db66f62a39?hl=ru&lnk=gst&q=batch_size&pli=1), но не уверен, что это значит. – Jeff

+0

http://nhibernate.info/doc/nhibernate-reference/batch.html: * Глава 13. Пакетная обработка *: «Обратите внимание, что NHibernate отключает встраивание пакетов на уровне ADO прозрачно, если вы используете генератор идентификатора идентификатора». – ngm

ответ

11

Я не знаю никаких проблем с этой версией NHibernate.

Используете ли вы native в качестве генератора идентификаторов для своих объектов? Потому что это заставит каждую вставку быть в одиночестве, выбрав обратно сгенерированный идентификатор. Это связано с тем, что база данных должна генерировать каждый идентификатор. Это также объясняет, почему пакетная обработка, похоже, работает с обновлениями.

Если возможно, вам следует переключиться на, например, стратегия hilo, или даже guid, если вам не нужны (легко) читаемые идентификаторы.

У Fabio есть интересные сообщения here по этой теме.

+0

Да Я использую идентификатор SQL Server 2005 (сгенерированный int) в качестве первичного ключа. Это объясняет, почему. Спасибо. – Jeff

+0

Я работаю с существующей базой данных, поэтому изменить идентификатор невозможно. – Jeff

+1

Объяснение генераторов идентичности http://fabiomaulo.blogspot.com/2009/02/nh210-generators-behavior-explained.html –

Смежные вопросы