代码之家  ›  专栏  ›  技术社区  ›  Jim G.

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

  •  3
  • Jim G.  · 技术社区  · 16 年前

    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 回复  |  直到 16 年前
        1
  •  10
  •   Stephan Bauer    9 年前

    有两种方法可以解决此问题:

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

    2. 你可以打电话给 Session.Refresh() 在你的内心 GetPerson() 方法始终从数据库获取最新状态,或者您可以通过自己的方法公开该功能 Refresh()

    3. 或者,如果您在 Person 对象本身,您也可以尝试 Session.Evict()

    根据我的经验,我试过2和3两种方法,最终总是选择重构来完成1。