如何最好地使用NHibernate的BeginTransaction是一个循环?

时间:2013-12-12 16:17:28

标签: c# nhibernate

我的代码正在尝试执行以下操作并导致锁定问题,因为它尝试提交的事务是针对大量数据项。

        using(var session = sManager.OpenSession())
        {
            using (var trans = session.BeginTransaction())
            {
                var rows = 0;
                foreach (var idsChunk in total.Chunk(500))
                {
                  .... <Execute Update>
                }

                trans.Commit();
            }
        }

大约有500K记录,上面的代码将基础表锁定了大量的时间。想知道在BeginTransation之外移动foreach是否会导致其他问题? 你能否建议适当的方式来做这个?

1 个答案:

答案 0 :(得分:0)

嗯,这取决于为什么您正在使用交易。如果整批失败,那么除了重新设计使用批量更新而不是使用NHibernate的逐个记录(除了会锁定表的时间)之外,你没有什么可做的。 。如果一个插入可以失败而不会使整个批处理失败,那么是将事务放在循环中(并捕获任何异常)