Session.SetBatchSize不会更改batchsize

时间:2009-12-14 10:22:58

标签: nhibernate

我创建了Session工厂,如:

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 个答案:

答案 0 :(得分:3)

我不知道NHProf是否以及如何报告批处理,但使用普通的SQL事件探查器您无法注意到它。

要验证它是如何工作的,以及是否确实已按照我的设置启用,我必须调试NHibernate的代码。

NHinernate所做的是将每个生成的SQL命令添加到一个SQL命令集合中,当达到定义的BatchSize或者没有更多的SQL命令要执行时,它将被刷新(发送到数据库)。

观察SQL分析器时,这不是显着的,因为SQL查询出现但实际上NHibernate将bactches中的命令发送到DB。

这样,如果你想在没有设置BatchSize的情况下执行10个SQL语句,NHsrante会与DB通信10次,但将BatchSize设置为10,那么只有一次发送所有SQL查询后,它才会与DB通信。不幸的是,这在SQL Profiler中并不明显......

答案 1 :(得分:1)

您如何检查实际发生的批处理以及正在使用的批处理大小? SQL事件探查器不显示批处理,您必须使用NHibernate Profiler来充分了解正在批处理的内容。

查看NH源会话.SetBatchSize()执行它所说的,所以它应该工作:)

答案 2 :(得分:0)

不要忘记在配置文件中设置<property name="adonet.batch_size">3</property>。我认为最大值是50.但是如果设置更高的值并且我不知道默认值,NH不会抛出任何错误。