是否可以强制NHibernate';是否重新使用连接的无状态会话?

是否可以强制NHibernate';是否重新使用连接的无状态会话?,nhibernate,connection-pooling,Nhibernate,Connection Pooling,当不使用事务时,NHibernate的无状态会话似乎会在每条语句(读或写)后强制关闭连接 看一下代码,这是因为ConnectionManager的ConnectionReleaseMode自动设置为AfterTransaction,不使用事务被解释为在自己的事务中执行每条语句 是否有方法更改此行为并允许在会话的整个生命周期中重用单个连接 我正在使用SqlClientDriver,以防万一 是否有方法更改此行为并允许单个连接 在会话的整个生命周期内重复使用 有。使用“on_close”使连接仅在N

当不使用事务时,NHibernate的无状态会话似乎会在每条语句(读或写)后强制关闭连接

看一下代码,这是因为ConnectionManager的
ConnectionReleaseMode
自动设置为
AfterTransaction
,不使用事务被解释为在自己的事务中执行每条语句

是否有方法更改此行为并允许在会话的整个生命周期中重用单个连接

我正在使用SqlClientDriver,以防万一

是否有方法更改此行为并允许单个连接 在会话的整个生命周期内重复使用

有。使用“on_close”使连接仅在NHibernate会话结束时关闭

重要提示:只有在使用诸如“每请求会话”之类的方法时,或者因为在这些场景中,事务边界之外可能会发生大量“懒散负载”,此选项才有意义。见:“……”

是否有方法更改此行为并允许单个连接 在会话的整个生命周期内重复使用

有。使用“on_close”使连接仅在NHibernate会话结束时关闭


重要提示:只有在使用诸如“每请求会话”之类的方法时,或者因为在这些场景中,事务边界之外可能会发生大量“懒散负载”,此选项才有意义。请参阅:“…”

只需将所有内容包装在一个NHibernate事务中(无论如何,这可能是可取的)


当事务打开时,连接也将打开。

只需将所有内容包装在一个NHibernate事务中即可(这可能无论如何都是可取的)


当事务打开时,连接也将打开。

当然我可以调用
OpenStatelessSession()
传递我自己的连接,但是我必须将连接生存期与会话生存期联系起来……你的实际问题是什么?(您试图通过连接重用来解决的问题)我的主要问题是性能—我在会话的生命周期内执行大约15条语句,并且我使用ApplicationRoles,因此每个连接建立都需要调用sp_setapprole存储过程。根据当前行为,在会话的生存期内,连接会打开和关闭15次,而approle sp会执行15次。这是什么类型的应用程序?会话的生命周期是什么?它是一个封装数据库并通过远程API向公司公开数据的SOA服务器。会话的生命周期是单个API调用,但由于对象模型的复杂性,单个API调用可能会导致执行大量查询,包括SELECT或INSERT查询。这些查询不能在NHibernate中建模为简单的OM关系。当然,我可以调用
OpenStatelessSession()
传递我自己的连接,但是我必须将连接生存期与会话生存期联系起来……你的实际问题是什么?(您试图通过连接重用来解决的问题)我的主要问题是性能—我在会话的生命周期内执行大约15条语句,并且我使用ApplicationRoles,因此每个连接建立都需要调用sp_setapprole存储过程。根据当前行为,在会话的生存期内,连接会打开和关闭15次,而approle sp会执行15次。这是什么类型的应用程序?会话的生命周期是什么?它是一个封装数据库并通过远程API向公司公开数据的SOA服务器。会话的生命周期是单个API调用,但由于对象模型的复杂性,单个API调用可能会导致执行大量查询,包括SELECT或INSERT查询。而且这些查询不能在NHibernate中建模为简单的OM关系。连接释放模式似乎被无状态会话完全忽略了——恐怕它只能由标准(有状态)强制执行会话。连接释放模式似乎被无状态会话完全忽略了-我担心它只由标准(有状态)会话强制执行。我想是这样的,但在那些查询集都是只读的(即仅选择)的情况下(在我的情况下,这是大多数情况下),它闻起来有点太多杀伤力了…或者可能是我太敏感了:-)我想是的,但在这些情况下(在我的情况下,这是大多数情况),查询集都是只读的(即仅选择)…或者可能是我太敏感了:-)