【问题标题】:NHibernate / multiple sessions and nested objectsNHibernate / 多个会话和嵌套对象
【发布时间】:2010-05-04 19:19:11
【问题描述】:

我们在富客户端应用程序中使用 NHibernate。它是一个非常开放的应用程序(用户搜索数据集或创建新数据集,更改数据并保存数据集。 我们让会话保持打开状态,因为有时我们必须延迟加载对象的某些属性(嵌套对象结构)。

这意味着一个大问题

  • 如果我们让会话保持打开状态,db (MySQL) 将关闭连接,我们无法发现这一点,并且在访问数据库时抛出异常(套接字通信错误)(我们正在考虑测试 db 连接在访问对象之前-但这也不是真正的最佳选择,另一种选择是设置数据库连接的超时,但这似乎不太好)。

那么 - 是否可以将会话重新连接到新的数据库连接?

另一个问题

  • 是否可以从一个会话中获取一个对象,然后将其重新附加到另一个会话? (我经常听到 session.lock 应该为此工作 - 但这在我们的应用程序中效果不佳 - 所以我最终从会话中获取了一个“新”对象并手动复制数据 - 这有点麻烦)

对此有什么想法吗?

【问题讨论】:

  • 1.您应该尝试找出未按预期管理连接的原因。也许您在代码的其他部分也会遇到同样的问题。会话对象可以连接,并且在正常情况下会自行连接多次。 2. 这听起来像是一个奇怪的应用程序设计,不恰当地使用了延迟加载。你能解释一下你为什么这样做吗?或者这是您第一次尝试 NHibernate?
  • 我同意 Paco 在延迟加载问题上的观点。您是否在请求之间共享您的 ISession 实例?
  • 好吧——我们的应用程序设计似乎有缺陷。谢谢你的提示。我们用模型中的数据填充视图——但后来用户想要创建一个报告(并且需要未显示的数据)——所以我们让会话保持打开状态并延迟加载丢失的数据。看起来最好从数据库中获取一个新对象并使用它。

标签: c# nhibernate session


【解决方案1】:

所以,现在我开始改变我们的应用程序设计 - 到目前为止,它看起来值得改变。

我们的主要问题是我们使用了非常长时间运行的事务 - 所以我已经将其更改为更明智的方法(使用非常短暂的事务),到目前为止效果很好。

关闭连接不再有问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 2014-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-02
    相关资源
    最近更新 更多