我正在使用NHibernate(共享架构)创建一个多租户ASP.NET应用程序。我原本打算在保存之前使用NHibernates事件监听器来检查/修改实体,以确保针对实体保存当前的租户ID。
包含租户ID的身份验证令牌管理得更高,并传递到数据层。
我的问题是,事件监听器是针对NHibernate配置而不是特定的ISession配置的。这意味着没有办法传递任何标识符供它使用,尽管我可以访问导致事件触发的ISession。
如何将ISession特定数据传递到事件监听器?
答案 0 :(得分:4)
您可以使用IInterceptor implementation执行此操作,因为ISessionFactory具有重载的OpenSession方法,该方法接受IInterceptor。用法如下:
var interceptor = new MyInterceptor(tenantId);
var session = factory.OpenSession(interceptor);
不幸的是,没有超载接受听众。