NHibernate:如何忽略缓存并直接转到数据库?

时间:2009-12-14 20:04:42

标签: nhibernate caching linq-to-nhibernate

考虑典型的NHibernate上下文类。

public class SampleContext : NHibernateContext
{
    public SampleContext(ISession session)
        : base(session)
    { }

    public IQueryable<Person> People
    {
        get { return Session.Linq<Person>(); }
    }

    public Person GetPerson(int id)
    {
        get { return Session.Linq<Person>().SingleOrDefault(p => p.ID == id); }
    }
}

我的问题:

  
      
  • 我怎样才能重写GetPerson方法来忽略缓存并直接从数据库中检索数据?
  •   

1 个答案:

答案 0 :(得分:9)

有几种方法可以解决这个问题:

  1. Hibernate的人会告诉你,你可能应该打开一个不同的会话,以便从数据库中检索最新的数据。他们会指出,会议的目的是确定一个相对短暂的工作单位。

  2. 您可以在Session.Refresh()方法中调用GetPerson()以始终从数据库中获取最新状态,也可以通过自己的{{1}公开该功能方法。

  3. 或者,如果您有Refresh()对象本身的句柄,您还可以尝试Person删除会话缓存中的Session.Evict()对象,然后重新加载它

  4. 根据我的经验,我已经尝试了#2和#3,最终总是来重构#1。