2010-06-29 77 views
0

我正在使用NHibernate(共享模式)创建一个多租户ASP.NET应用程序。我曾打算使用NHibernates事件监听器在保存之前检查/修改实体,以确保当前租户ID正在针对实体进行保存。NHibernate ISession特定事件监听器

包含租户ID的身份验证令牌被更高级地管理并向下传递到数据层。

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

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

回答

3

你可能可以用IInterceptor implementation来做到这一点,因为ISessionFactory有一个接受IInterceptor的重载OpenSession方法。用法可能类似于:

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

不幸的是,没有接受侦听器的重载。

+0

谢谢杰米,这看起来好像可能会诀窍,我现在要尝试一下。 – Matt 2010-06-29 13:08:05