アプリケーションでデータベースアクセスを行うためにNHibernateを使用しています。私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; }
}
現時点では、にCountryOfBirth
設定CountryOfResidence
していfetch="join"
ます。ただし、データベース内の国のリストはほとんど静的であるため、これらの値をキャッシュしたいと思います。CountryOfBirth
プロパティを次のように変更しました。
Country countryOfBirth;
public virtual Country CountryOfBirth{
get
{
if (country is INHibernateProxy)
countryOfBirth = CountryRepository.GetById(countryOfBirth.Id);
return countryOfBirth;
}
set { countryOfBirth = value; }
}
ただし、モデルクラスは、カプセル化を破るNHibernateによって使用されていることを知る必要があります。
これを達成するためのより良い方法はありますか?たとえば、プロキシをロードしようとしてセッションが期限切れになった場合に、NHibernateがリポジトリクラスを自動的に通過するようにする方法はありますか?
または、別の方法を使用する必要がありますか?