我的代码正在尝试执行以下操作并导致锁定问题,因为它尝试提交的事务是针对大量数据项。
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是否会导致其他问题? 你能否建议适当的方式来做这个?
答案 0 :(得分:0)
嗯,这取决于为什么您正在使用交易。如果整批失败,那么除了重新设计使用批量更新而不是使用NHibernate的逐个记录(除了会锁定表的时间)之外,你没有什么可做的。 。如果一个插入可以失败而不会使整个批处理失败,那么是将事务放在循环中(并捕获任何异常)