1

バックグラウンド

同じモデルで実行されているいくつかのプロジェクト/アプリケーションがあります。それらはすべて独自の一意のエンティティ/テーブルを持っていますが、1 つの特定の共通エンティティ/テーブルも共有しています。つまり、アプリケーション A が必要とするエンティティは、共通テーブルを除いて、アプリケーション B が必要とすることはありません。逆もまた同様です。これで、共通テーブルには、アプリケーション A のテーブルだけでなく、アプリケーション B のテーブルとも関係があります。大量の HBM をロードすると処理が遅くなるため、現在実行中のアプリケーションに必要な HBM のみをロードするシステムを実装しました。

問題

アプリケーション A で、共通テーブル/エンティティにアクセスすると、次のようになります。

session.Linq<CommonEntity> ().Where (...);

次の例外が発生します

NHibernate.MappingException: 関連付けがマップされていないクラスを参照しています: (アプリケーション B のエンティティ)

私は、共通エンティティからのリレーションシップを介してアプリケーション B のテーブルに明示的にアクセスしようとした場合にのみ NHibernate が壊れることを望んでいました。結果として、アプリケーション A からはアクセスしないため、壊れることはありません。

質問

アクセスされるまでリレーションシップ マッピングの検証を遅らせるように NHibernate を構成する方法はありますか?

遅延読み込みを使用します。

4

2 に答える 2

2

構成は 1 回限りの操作であり、SessionFactory をビルドするときに構成が 100% 一貫している必要があります。

それでも遅すぎる場合は、構成をシリアル化できます。http://github.com/ayende/Effectus/blob/master/Effectus/Infrastructure/BootStrapper.csを参照してください。

于 2010-09-13T13:15:19.437 に答える
1

検証を遅らせる方法はわかりませんが、そうは思いません。

ただし、別のオプションがあるかもしれません。アプリケーションごとに別のマッピング ファイルのセットを使用することもできます。各セットには、そのアプリケーションと共通テーブルに必要なエンティティのみが含まれています。

共通テーブルのマッピング ファイルには、他のアプリケーションに属するテーブルへの関係を作成する列を含めないでください。

したがって、各アプリケーションには独自の一貫したエンティティ セットがあり、マップされていない列は無視されます。

于 2010-09-16T06:33:16.450 に答える