我正在使用(老派)NHibernate(不是Fluent)来更新数据库中的一些记录。我正在更新实体,然后使用transaction.commit()
。代码执行时,不会抛出任何异常。但是当我查看数据库时,记录没有得到更新。经过进一步调查,当我调试代码时,我会查看transaction
对象,执行提交后committed
属性为false
。但没有抛出异常。我反复试过一遍又一遍地更新同一组记录。
经过进一步调查,我注意到{I} committed
属性每隔一段时间设置为true
,正如我所料。检查数据库时,记录已正确保存。但它是随机的。有时它会保存并且committed
属性为true。有时它不会保存,committed
属性为false
。我找不到任何理由,而且我一遍又一遍地更新相同的记录。
有谁知道会发生什么?这是我的代码的简短片段:
Using session = NHibernateSession.OpenSession
'GET PATIENT RESPONSE RECORDS FROM THE DATABASE
Dim critPSR As NHibernate.ICriteria = session.CreateCriteria(GetType(T_PATIENTSURVEYRESPONSE))
Dim psrList As IList(Of T_PATIENTSURVEYRESPONSE) = critPSR.List(Of T_PATIENTSURVEYRESPONSE)()
'UPDATE AND SAVE ALL THE RESPONSES
Using transaction = session.BeginTransaction
For Each psr In psrList
If (ValuesFromPage.Any(Function(x) x.PatientSurveyResponseID = psr.PatientSurveyResponseID)) Then
Dim val = ValuesFromPage.First(Function(x) x.PatientSurveyResponseID = psr.PatientSurveyResponseID)
psr.Text = val.Text
psr.AnsweredInd = True
psr.AuditCompleteInd = False
session.Update(psr)
End If
Next
transaction.Commit()
End Using
End Using
有一点需要注意 - 我们的数据库已经增长到大约24G。我不知道是否可能是某些磁盘写入错误。但我希望能抛出某种异常。