我正在使用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; }
}
但是,它需要我的Model类知道NHibernate正在使用它,这打破了封装。
有没有更好的方法来实现这一目标?例如,有没有办法让NHibernate在尝试加载代理并且会话已过期时自动浏览我的Repository类?
或者我应该使用其他方法吗?
答案 0 :(得分:2)
如果您想添加缓存功能,请查看NHibernate L2 Cache。查看本教程http://nhforge.org/blogs/nhibernate/archive/2009/02/09/quickly-setting-up-and-using-nhibernate-s-second-level-cache.aspx并搜索此主题。通过使用缓存,您不会使用任何NH代理,存储库等来对模型进行轮询。