2

私の Web アプリケーションのマスター ページは認証を行い、Get.

この後、ユーザーコントロールまたは他のクラスでユーザーオブジェクトが必要になるたびに、Load.

通常、nhibernate はキャッシュからオブジェクトをロードするか、呼び出されるたびLoadに永続的にロードされたオブジェクトを返すことになっています。しかし、これは私の Web アプリケーションが示す動作ではありません。Loadが呼び出されるたびに、 NHprofは常にSQLを表示します。の正しい動作を確認するにはどうすればよいLoadですか?

S#arp アーキテクチャフレームワークを使用しています。

4

2 に答える 2

6

実際には、遅延としてマークされていないエンティティで Load を呼び出すと、すぐに読み込みが行われます。これは、非遅延エンティティがプロキシされることがないためです。この場合、Get と同じように機能します。

于 2011-04-20T08:03:14.320 に答える
2

Get を使用すると、データベースにヒットします。Load を使用すると、データベースへのヒットは発生しませんが、オブジェクト (この場合は User) は「遅延読み込み」で作成されます。したがって、プロパティをチェックすると、データが必要であることを認識しているため、データを取得するクエリでデータベースにヒットします。

キャッシュからオブジェクトを取得する場合は、2 つのオプションを考慮する必要があります。第 1 レベルのキャッシュは、1 つのセッションで使用されているキャッシュです。したがって、セッションを閉じるか、別のセッションで同じオブジェクトをロードすると、追加のヒットが発生します。第 2 レベルのキャッシュは、すべてのセッションで機能します。一方のセッションがオブジェクトを取得すると、もう一方のセッションがキャッシュから取得します。

したがって、必要なのはおそらく二次キャッシュです。

于 2010-04-05T16:44:30.390 に答える