0

アプリケーションでデータベースアクセスを行うために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がリポジトリクラスを自動的に通過するようにする方法はありますか?

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

4

1 に答える 1

2

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

于 2012-05-03T10:16:44.717 に答える