私の「user」エンティティは、ほとんどの場合、整数の代理キーではなく、usernameによって取得されます。ユーザー名は主キーではないため、これはISessionがユーザー名をキャッシュせず、同じデータを取得するためにデータベースに繰り返しアクセスすることを意味します。
ユーザー名で取得したユーザーをキャッシュするようにISessionを取得するようにNHibernateを構成する方法はありますか?
私の「user」エンティティは、ほとんどの場合、整数の代理キーではなく、usernameによって取得されます。ユーザー名は主キーではないため、これはISessionがユーザー名をキャッシュせず、同じデータを取得するためにデータベースに繰り返しアクセスすることを意味します。
ユーザー名で取得したユーザーをキャッシュするようにISessionを取得するようにNHibernateを構成する方法はありますか?
答えは実際にはノーのようです。はい、第2レベルのキャッシュを使用している場合は、いいえ、セッションキャッシュを使用している場合はいいえ。
はい、NHibernateのnatural-id要素を使用してこれを実現できます。http://ayende.com/Blog/archive/2009/06/23/nhibernate-ltnatural-idgt.aspxを参照してください。この例は、まさにあなたが求めているものです。
「セッションキャッシュ」は実際にはキャッシュではなく、エンティティマップです。
私の提案は、HttpContextにアイテムを格納するカスタムプロバイダーを使用して、クエリの第2レベルのキャッシュを有効にすることです。