在我的asp.net mvc应用程序会话中,工厂缓存在应用程序级别上。比每个请求创建和关闭新会话。 不幸的是,在PostUpdate上订阅的日志服务,会话工厂的PostInsert事件需要当前用户ID。因此,它是在请求范围内创建的。因此,可能同时存在多个日志服务实例,并从会话工厂/会话中侦听事件(如果同时处理多个请求)。因此,一个用户的更改将引发会话工厂的事件,该事件将由记录器服务的所有现有实例存储。
解决方案可以是会话订阅而不是会话工厂订阅。这会将记录器服务的依赖关系范围缩小到单个请求的范围。
我的问题是:有没有办法为特定的nhibernate会话而不是整个会话工厂注册事件监听器?
答案 0 :(得分:0)
找到解决方案。 ISession接口不公开EventListeners属性,但会公开SessionImpl属性。可以将会话对象转换为SessionImpl并分配所需的侦听器。