Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net Isn';t NHibernate';s";“每个请求一个会话”;模式对于长web请求有点危险?_.net_Nhibernate_Transactions - Fatal编程技术网

.net Isn';t NHibernate';s";“每个请求一个会话”;模式对于长web请求有点危险?

.net Isn';t NHibernate';s";“每个请求一个会话”;模式对于长web请求有点危险?,.net,nhibernate,transactions,.net,Nhibernate,Transactions,在我工作的公司中,我们使用一个NHibernate会话包装器,在同一个请求结束时处理当前web请求中打开的所有会话,并提交所有相关事务(我们在多数据库环境中工作,我们为每个数据库创建一个会话) 另外,在我们使用的会话包装器中,会话和事务是耦合的,如果不处理其会话,我们就不能提交事务 问题是,有时,事务在整个请求生命周期内都保持打开状态,而数据库表在很长时间内保持锁定状态 。。。我们遗漏了什么吗?每个请求的会话只是执行会话生命周期管理的一种方法。这恰好是web应用程序的推荐策略,但NHiberna

在我工作的公司中,我们使用一个NHibernate会话包装器,在同一个请求结束时处理当前web请求中打开的所有会话,并提交所有相关事务(我们在多数据库环境中工作,我们为每个数据库创建一个会话)

另外,在我们使用的会话包装器中,会话和事务是耦合的,如果不处理其会话,我们就不能提交事务

问题是,有时,事务在整个请求生命周期内都保持打开状态,而数据库表在很长时间内保持锁定状态


。。。我们遗漏了什么吗?

每个请求的会话只是执行会话生命周期管理的一种方法。这恰好是web应用程序的推荐策略,但NHibernate对如何管理会话生命周期漠不关心

您当然可以使用比单个请求寿命更短或更长的会话。如果您有这样更好的用例,那么一定要去做


不要让会话包装器对您使NHibernate适应应用程序需要的能力施加不必要的限制。

每个请求的会话只是会话生命周期管理的一种方法。这恰好是web应用程序的推荐策略,但NHibernate对如何管理会话生命周期漠不关心

您当然可以使用比单个请求寿命更短或更长的会话。如果您有这样更好的用例,那么一定要去做


不要让会话包装器对您调整NHibernate以满足应用程序需要的能力施加不必要的限制。

听起来更像是对您正在使用的会话管理器的限制。假定所有打开的事务都应该在会话结束时处理(如果未提交,则回滚)-您应该能够根据需要创建和提交事务。这实际上取决于您希望如何处理服务调用——如果您希望它将服务调用视为一个原子事务,那么我认为您必须锁定直到完成。这里有很多选项。

听起来更像是对您使用的会话管理器的限制。假定所有打开的事务都应该在会话结束时处理(如果未提交,则回滚)-您应该能够根据需要创建和提交事务。这实际上取决于您希望如何处理服务调用——如果您希望它将服务调用视为一个原子事务,那么我认为您必须锁定直到完成。这里有很多选项。

+每个请求一个会话是可以的,但是程序员应该控制会话的打开和关闭时间,以尽可能紧密地隔离数据操作。如果一个请求的时间比一个典型的数据查询的时间长很多,那么这绝对是首先要解决的问题。每个请求+1个会话是可以的,但是程序员应该控制会话的打开和关闭时间,以便尽可能紧密地隔离数据操作。如果一个请求的时间比一个典型的数据查询的时间长很多,那么这绝对是首先要解决的问题。每个请求使用多个会话是否有限制?例如,访问惰性属性的固有性?否则,如果我们在一个请求中使用多个事务,那么多个事务共享的实体的惰性属性能否继续正常工作?@notriousxl:lazy属性只能在中检索对象的同一会话中访问。至于什么可行,什么不可行,只需编写一些简单的单元/集成测试,涵盖您所关心的场景,以证明它们可以按照您的需要工作。每个请求使用多个会话是否有限制?例如,访问惰性属性的固有性?否则,如果我们在一个请求中使用多个事务,那么多个事务共享的实体的惰性属性能否继续正常工作?@notriousxl:lazy属性只能在中检索对象的同一会话中访问。至于什么可行,什么不可行,只需编写一些简单的单元/集成测试,涵盖您所关心的场景,以证明它们在您需要的情况下可以正常工作。