【问题标题】:Is there any way to retrieve a list of open session objects from a session factory in nHibernate?有没有办法从 nHibernate 的会话工厂中检索打开的会话对象列表?
【发布时间】:2016-12-26 21:45:51
【问题描述】:

我希望能够查询会话工厂以获取所有已创建且仍处于打开状态的会话的列表。似乎应该在某个地方进行跟踪,即使它不是公开的或从工厂直接访问的。

【问题讨论】:

  • 您可以自己实现会话工厂。如果请求会话,请将其添加到会话列表中。如果它关闭,则将其从列表中删除。
  • 呃..我可以看到它是如何工作的,基本上是在我请求会话时创建一个“正在运行”的 sessionid 的哈希表。将会话本身存储为该键引用的对象。这很容易,但看起来很混乱。会话结束时,我必须从哈希表中删除会话。由于我没有按请求使用会话,因此我真的想要一个更简洁的实现。我希望我可以以某种方式简单地查询 _sessionfactory 以获取打开的会话,但我非常感谢@peer 的输入。
  • NH 分析器会这样做吗?我从未使用过它,但它是一种用于跟踪 NH 正在做什么的流行工具。
  • @Cole Hey Cole,我用过 NH Prof 很多次,它是一个很棒的工具。它坐下并监视活动,您可以看到会话打开并查看与每个会话相关联的 sql 活动,但我不确定 NH 监视 dll 是如何连接到工作流中的,或者这是否能满足我的需要。不过感谢您的评论!

标签: c# .net nhibernate session


【解决方案1】:

在我看来,您的问题是错误的(XY 问题)。

您为什么需要从一个中心位置了解哪些会话仍处于打开状态?

您的应用程序是否泄漏资源?您需要性能统计信息吗?

我建议您编辑您的问题以反映您要解决的实际问题。

【讨论】:

  • 感谢您的回复。我试图跳出框框思考,并以与每个请求的会话不同的模式使用 nhibernate,并以从长远来看不会产生更多工作的方式进行操作。我觉得我的问题是有效的。
  • @DavidC:我没有说它无效。请解释您如何尝试使用它,我们将能够提供帮助。否则,我能给你的最好的就是“你自己从负责开幕会议的班级跟踪他们,如果你没有,就创建它”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-04
  • 2011-12-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多