NHibernate ISession特定的事件监听器

时间:2010-06-29 12:42:08

标签: asp.net nhibernate events multi-tenant

我正在使用NHibernate(共享架构)创建一个多租户ASP.NET应用程序。我原本打算在保存之前使用NHibernates事件监听器来检查/修改实体,以确保针对实体保存当前的租户ID。

包含租户ID的身份验证令牌管理得更高,并传递到数据层。

我的问题是,事件监听器是针对NHibernate配置而不是特定的ISession配置的。这意味着没有办法传递任何标识符供它使用,尽管我可以访问导致事件触发的ISession。

如何将ISession特定数据传递到事件监听器?

1 个答案:

答案 0 :(得分:4)

您可以使用IInterceptor implementation执行此操作,因为ISessionFactory具有重载的OpenSession方法,该方法接受IInterceptor。用法如下:

var interceptor = new MyInterceptor(tenantId);
var session = factory.OpenSession(interceptor);

不幸的是,没有超载接受听众。