首页 文章

使用Fluent NHibernate批量插入实体集合

提问于
浏览
18

我正在尝试使用流畅的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();
    }
}

对于稍微模糊的问题道歉,我感觉我只是以错误的方式接近事情而且任何指针都会非常感激!

1 回答

相关问题