【发布时间】:2021-01-21 20:46:45
【问题描述】:
我目前正在修复旧的 Windows 应用程序并遇到 NHibernate 错误。我在网上阅读并尝试了一些东西,但最终出现错误。
这是我的 ISession 代码:
Public ReadOnly Property session() As ISession
Get
If IsNothing(m_session) Then
m_session = Factory.InitConfiguration.OpenSession()
End If
Return m_session
End Get
End Property
这是我保存按钮的代码:
Try
session.BeginTransaction()
SetParent(x_object)
'session.clear()
session.Flush()
session.SaveOrUpdate(x_object)
session.Transaction.Commit()
compObj.IsNew = False
Return True
Catch ex As Exception
AppServices.ErrorMessage = ex.Message
session.Transaction.Rollback()
Return False
Finally
'TBA
End Try
所以问题从这里开始,我有这个日期列作为 DateTime 和 AttachmentList。
当前代码在用户键入小于 1753 的年份之前没有任何问题。但是代码正确捕获错误并显示消息,当用户继续修复年份错字时,它仍然会捕获错误(在手表上我已经获得了新值),直到用户关闭应用程序并重新打开它。
但是,如果我取消对 session.clear() 的注释,它会很好,用户可以修复他们的拼写错误并继续保存记录,但是当用户执行其他操作让我们说附件时,它会得到另一个错误.附件动作如下:
- 添加附件
- 点击保存按钮
- 添加新附件
- 点击保存按钮
- 新错误。
所以请告诉我需要做什么。我试过合并,我试过更新,保存,驱逐但最终出错。我认为我的问题是我如何安排会议是问题的主要根源。
【问题讨论】:
-
m_session和x_object的范围是什么?您是否将实体映射到 DTO 之类的其他东西? -
@A_J 是的,我将实体映射到许多子对象并将其设置为 1 个父对象。然而,弗雷德里克的解释解决了我的问题。你可以参考一下原因。
标签: vb.net nhibernate transactions