在我的asp.net mvc应用程序中,会话工厂是在应用程序级别缓存的。然后在每次请求时创建并关闭新会话。遗憾的是,在会话工厂的PostUpdate、PostInsert事件上订阅的日志记录服务需要当前用户id。因此它是在request作用域中创建的。因此,日志记录服务的多个实例可能同时存在,并侦听来自会话工厂/会话的事件(如果同时处理多个请求)。因此,一个用户的更改将在会话工厂上引发事件,该事件将由记录器服务的所有现有实例存储。
解决方案可以是订阅会话,而不是订阅会话工厂。这将把记录器服务的依赖范围缩小到单个请求的范围。
我的问题是:有没有办法为特定的nhibernate会话而不是整个会话工厂注册事件侦听器?
发布于 2015-09-22 16:09:24
找到了解决方案。ISession接口不公开EventListeners属性,但SessionImpl公开了。可以将会话对象强制转换为SessionImpl并分配所需的侦听器。
https://stackoverflow.com/questions/32697938
复制相似问题