Session.SetBatchSize не меняет размер пакета - PullRequest
2 голосов
/ 14 декабря 2009

Я создаю Session factory как:

FluentConfiguration cfg =
    Fluently.Configure().Database(MsSqlConfiguration.MsSql2005.ConnectionString(
        c => c.Is(dbConnectionString)).**AdoNetBatchSize(100)**.ShowSql()).                    
            Mappings(m => m.FluentMappings.AddFromAssembly(mappingAssembly)).
            Mappings(m => m.HbmMappings.AddFromAssembly(mappingAssembly));

Если я позже установлю session.SetBatchSize(someOtherSize); во время последующего выполнения программы Ничего не произошло. это как если бы эта команда была просто фиктивной.

Почему это?

Заранее спасибо

Ответы [ 3 ]

3 голосов
/ 14 декабря 2009

Я понятия не имею, если и как NHProf сообщает о пакетной обработке, но, используя обычный SQL Profiler, вы не можете это заметить.

Чтобы проверить, как он работает и действительно ли он включен, как я его настроил, мне пришлось отладить код NHibernate.

Что NHinernate делает, так это добавляет каждую сгенерированную команду SQL в коллекцию команд SQL, которые она сбрасывает (отправляет в БД) при достижении определенного BatchSize или когда больше нет команд SQL для выполнения.

Наблюдая за профилировщиком SQL, это не заметно, поскольку появляются запросы SQL, но на самом деле NHibernate отправляет команды в пакетах в БД.

Таким образом, если вы хотите выполнить 10 операторов SQL без установки BatchSize, NHinerante будет взаимодействовать с БД 10 раз, но с установкой BatchSize равным 10, тогда она будет взаимодействовать с БД только после отправки всех запросов SQL за один раз. К сожалению, это не заметно в SQL Profiler ...

1 голос
/ 14 декабря 2009

Как вы проверяете, что пакетирование действительно происходит и какой размер пакета используется? Профилировщик SQL не показывает пакетирование, вы должны использовать NHibernate Profiler, чтобы получить хорошее представление о том, что пакетируется.

Глядя на исходную сессию NH.SetBatchSize () делает то, что говорит, поэтому должен работать :)

0 голосов
/ 14 декабря 2009

Не забудьте установить <property name="adonet.batch_size">3</property> в файле конфигурации. Максимальное значение, я думаю, составляет 50. Но NH не выдает никакой ошибки, если установить более высокое значение, и я не знаю значение по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...