2012-05-03 4 views
0

私はアプリケーションでデータベースアクセスを行うためにNHibernateを使用しています。私のISessionは永続性がなく、アプリケーションを別のレイヤーに分けやすくするので、これで満足しています。唯一の難しさは、良い方法で遅延読み込みを処理することです。ISessionの外部で遅延ロードを扱う?

私はこのようになりますモデルクラスがあります。現時点では

public class User { 
    public virtual int Id { get; set; } 
    public virtual string Name { get; set; } 
    public virtual Country CountryOfBirth { get; set } 
    public virtual Country CountryOfResidence {get; set; } 
} 

を、私はfetch="join"CountryOfBirthCountryOfResidenceセットを持っています。しかし、私のデータベースの国のリストはほとんど静的なので、私はこれらの値をキャッシュします。私はこのように見えるCountryOfBirthプロパティを変更:

Country countryOfBirth; 
    public virtual Country CountryOfBirth{ 
     get 
     { 
      if (country is INHibernateProxy) 
       countryOfBirth = CountryRepository.GetById(countryOfBirth.Id); 
      return countryOfBirth; 
     } 
     set { countryOfBirth = value; } 
    } 

しかし、それはカプセル化を壊しNHibernateは、によって使用されていることを知ることが私のモデルクラスが必要です。

これを達成するためのより良い方法はありますか?例えば、NHibernateがプロキシを読み込もうとするとセッションが期限切れになった場合、自動的にリポジトリクラスを通過するようにする方法がありますか?

別の方法を使用する必要がありますか?

答えて

2

キャッシュ機能を追加する場合は、NHibernate L2キャッシュを参照してください。このチュートリアルhttp://nhforge.org/blogs/nhibernate/archive/2009/02/09/quickly-setting-up-and-using-nhibernate-s-second-level-cache.aspxをチェックし、このトピックを検索してください。キャッシュを使用することで、NHプロキシ、リポジトリなどでモデルをポーリングすることはありません。

+0

ありがとう、ありがとう。私は2番目のレベルのキャッシュは私が必要と思うものだと思う。 – Oliver