我有一个带有级联列表的对象,该列表按以下方式映射:
HasMany(x => x.Products).Cascade.AllDeleteOrphan(); //.BatchSize(10000);
将20000个产品添加到列表后,提交需要30秒以上(最多3秒)。
我需要的是一种散装插件。我可以遵循这种方法:Speed up bulk insert operations with NHibernate。我知道这个解决方案使用的是StatelessSession
,但无论如何,我希望在我的映射中配置这些东西,直接将对象添加到我Entity
的列表中,NHibernate
处理其余的东西。在列表映射上设置BatchSize
似乎没有任何效果。
有没有办法在可接受的时间内完成这项任务?
答案 0 :(得分:0)
我认为映射中的批量大小仅与获取有关。您可以尝试在nhibernate配置中使用此配置:
<property name="adonet.batch_size">250</property>
答案 1 :(得分:0)
唯一能加快速度的是使用无状态会话
(请阅读:Inserts of stateless session of NHibernate are slow)
另外,请注意以下事项 - 使其更快
cfg.AutoCommentSql = false;
cfg.LogFormattedSql = false;