我正在尝试使用流利的 NHibernate 将大量对象集合插入到表中,使用调用来保存或更新在 foreach 循环中传递集合中的每个实体。我一直在将批量大小设置为集合的大小,但是我在 Ayende 的博客上读到不建议将其设置为较大的值,因此我将其上限设置为 250,但是当我在 NHProf 中查看集合时,我看到一个插入语句流(集合大约有 20000 个项目),而不是一组批量插入调用。
对于本质上非常基本的查询,这似乎非常低效并且花费的时间比我预期的要长得多 - 将一个值插入 25 列(是的,这是一个可以做得更好的地方,但它是一个遗留数据库我现在坚持)到一个 SQL Server 2008 数据库 - 所以我只能假设我做错了。
有没有推荐的方法来使用 NHibernate 插入大量实体?使用 Save over SaveOrUpdate 是否可以提高效率?
add 方法的代码 - SetBatchSize 调用是批处理上限为 250 的地方,如果小于 250,则设置为集合大小:
public void Add(IEnumerable<TEntity> entities)
{
var session = GetCurrentSession();
using (var transaction = session.BeginTransaction())
{
entities = entities.ToList();
session.SetBatchSize(SetBatchSize(entities.Count()));
foreach (var entity in entities)
session.SaveOrUpdate(entity);
transaction.Commit();
}
}
为这个稍微模糊的问题道歉,我觉得我只是以错误的方式处理事情,任何指针都将不胜感激!