0

NHibernate (共有スキーマ) を使用してマルチテナント ASP.NET アプリケーションを作成しています。現在のテナント ID がエンティティに対して保存されていることを確認するために、保存する前に NHibernates イベント リスナーを使用してエンティティを検査/変更するつもりでした。

テナント ID を含む認証トークンは上位で管理され、データ レイヤーに渡されます。

私の問題は、イベント リスナーが特定の ISession ではなく、NHibernate 構成に対して構成されていることです。これは、イベントを発生させた ISession にアクセスすることはできますが、使用する識別子を渡す方法がないことを意味します。

ISession 固有のデータをイベント リスナーに渡すにはどうすればよいですか?

4

1 に答える 1

4

ISessionFactory には、IInterceptor を受け入れるオーバーロードされた OpenSession メソッドがあるため、 IInterceptor の実装でこれを実行できる場合があります。使用法は次のようになります。

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

残念ながら、リスナーを受け入れるオーバーロードはありません。

于 2010-06-29T12:53:57.197 に答える