Fel*_*ago 3 c# sql-server nhibernate
今天我有一个包含 40.000 个寄存器的列表,我需要将其保存在我的 MSSQL 数据库中。当我试图保存它时,我检查了我的控制台显示,我意识到它正在逐项保存,这消耗了很多时间,即使我试图用下面的命令插入整个列表。
List<Andamento> andamentoList = fillAndamentoList(parameters);
_repository.Save(andamentoList);
_repository.Commit();
Run Code Online (Sandbox Code Playgroud)
是否可以配置 NHibernate 并将其更改为仅通过一个数据库交互来实际插入整个列表?
非常感谢,
要使用 NHibernate 进行批处理,您需要使用无状态会话:
using (var statelessSession = sessionFactory.OpenStatelessSession())
using (var transaction = statelessSession.BeginTransaction())
{
foreach (var item in andamentoList)
{
statelessSession.Insert(item);
}
transaction.Commit();
}
Run Code Online (Sandbox Code Playgroud)
将此与批处理大小相结合以在您的配置文件中获得性能:
<property name="adonet.batch_size">100</property>
Run Code Online (Sandbox Code Playgroud)
您可以在此处阅读更多内容。
小智 0
首先要事。如果您不启动显式事务,NHibernate 将为您保存/刷新的每一项启动隐式事务。开始交易的成本很高。所以你需要做的第一件事是
using (var transaction = session.BeginTransaction())
{
//Loop here
transaction.Commit();
}
Run Code Online (Sandbox Code Playgroud)
另一件需要注意的事情是需要多少条语句来保存一个实体。如果它不止一个,您必须创建自己的批处理程序(内置的批处理程序无法很好地处理每类表和其他情况)。
| 归档时间: |
|
| 查看次数: |
3757 次 |
| 最近记录: |