我需要在生产环境中执行一个长时间的运行过程(请不要问为什么),我在这个过程中使用 ReadUncommited 打开一个事务,但是它锁定了所有涉及的表,我确实在表上运行了一些更新。因此,当我运行此过程然后尝试对这些表中的任何一个运行查询时,查询会因为锁定而超时。
反正我的事务不会锁定表吗?如果我不使用事务,则表不会被锁定。
这是我的代码
ISession session = sessionProvider.GetCurrentSession();
session.SetBatchSize(100);
session.BeginTransaction(IsolationLevel.ReadUncommitted);
var solrCandidateFactory = _container.GetInstance<ISolrCandidateFactory>();
int id;
while (concurrentQueue.TryDequeue(out id))
{
var cv = session.Get<Curriculum>(id,LockMode.None);
SolrCandidate fromCandidate = solrCandidateFactory.CreateFromCandidate(cv);
_candidateIndexer.Index(fromCandidate);
session
.CreateSQLQuery("update Curriculum set IndexedAt = :time where Id = :id")
.SetParameter("time", DateTime.Now)
.SetParameter("id", id)
.ExecuteUpdate();
}
session.Transaction.Commit();