0

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

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

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

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

4

1 回答 1

4

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

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

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

于 2010-06-29T12:53:57.197 回答