【发布时间】:2010-05-04 19:19:11
【问题描述】:
我们在富客户端应用程序中使用 NHibernate。它是一个非常开放的应用程序(用户搜索数据集或创建新数据集,更改数据并保存数据集。 我们让会话保持打开状态,因为有时我们必须延迟加载对象的某些属性(嵌套对象结构)。
这意味着一个大问题
- 如果我们让会话保持打开状态,db (MySQL) 将关闭连接,我们无法发现这一点,并且在访问数据库时抛出异常(套接字通信错误)(我们正在考虑测试 db 连接在访问对象之前-但这也不是真正的最佳选择,另一种选择是设置数据库连接的超时,但这似乎不太好)。
那么 - 是否可以将会话重新连接到新的数据库连接?
另一个问题
- 是否可以从一个会话中获取一个对象,然后将其重新附加到另一个会话? (我经常听到 session.lock 应该为此工作 - 但这在我们的应用程序中效果不佳 - 所以我最终从会话中获取了一个“新”对象并手动复制数据 - 这有点麻烦)
对此有什么想法吗?
【问题讨论】:
-
1.您应该尝试找出未按预期管理连接的原因。也许您在代码的其他部分也会遇到同样的问题。会话对象可以连接,并且在正常情况下会自行连接多次。 2. 这听起来像是一个奇怪的应用程序设计,不恰当地使用了延迟加载。你能解释一下你为什么这样做吗?或者这是您第一次尝试 NHibernate?
-
我同意 Paco 在延迟加载问题上的观点。您是否在请求之间共享您的 ISession 实例?
-
好吧——我们的应用程序设计似乎有缺陷。谢谢你的提示。我们用模型中的数据填充视图——但后来用户想要创建一个报告(并且需要未显示的数据)——所以我们让会话保持打开状态并延迟加载丢失的数据。看起来最好从数据库中获取一个新对象并使用它。
标签: c# nhibernate session