有没有办法从任何地方访问当前的Nhibernate会话?

时间:2016-03-22 09:23:18

标签: nhibernate

我有一些用于打开自己的Sqlconnection的遗留代码。我现在想使用SqlConnection Nhibernate创建。

但我宁愿避免更改代码(DI,添加大量设置,......),那么,是否有一种简单(快速)方式来获取当前的Nhibernate会话?

1 个答案:

答案 0 :(得分:2)

没有。无论如何,当前的NHibernate会话是什么?

在Web应用程序中,每个http请求必须与其特定的NHibernate会话一起使用。

在桌面应用程序中,每个屏幕可能会为每个操作使用一个会话。

NHibernate会话不应该用作单例。

您应该使用会话工厂在旧代码中打开新的NHibernate会话,然后使用其CreateSQLQuery方法。您的会话工厂通常应该具有单例生存期。

如果将NHibernate会话绑定到对应用程序有意义的某些上下文(例如HttpContext,CallContext),则可以从那里获取它。注意可能导致上下文丢失的情况(async / await配置为不恢复上下文,asp.net线程敏捷性(不会导致HttpContext丢失但CallContext丢失),...)。