我创建了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);
什么都没发生。就好像这个命令只是一个模拟。
为什么?
提前致谢
答案 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不会抛出任何错误。