2010-06-29 51 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