今天我有一个清单,其中有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

10-06 00:34