今天我有一个清单,其中有40000个寄存器需要保存在mssql数据库中。当我试图保存它时,我检查了我的控制台显示,我意识到它是逐项保存的,这耗费了很多时间,即使我试图用下面的命令插入整个列表。
List<Andamento> andamentoList = fillAndamentoList(parameters);
_repository.Save(andamentoList);
_repository.Commit();
是否可以配置nhibernate并将其更改为实际插入只有一个数据库交互的整个列表?
非常感谢,
最佳答案
对于使用nhibernate的批处理,需要使用无状态会话:
using (var statelessSession = sessionFactory.OpenStatelessSession())
using (var transaction = statelessSession.BeginTransaction())
{
foreach (var item in andamentoList)
{
statelessSession.Insert(item);
}
transaction.Commit();
}
将此值与批处理大小相结合以在配置文件中获得性能:
<property name="adonet.batch_size">100</property>
您可以阅读更多here。