4

考虑一个典型的 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 方法以忽略缓存并直接从数据库中检索数据?
4

1 回答 1

10

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

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

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

  3. 或者,如果您有Person对象本身的句柄,您也可以尝试在再次加载之前Session.Evict()删除会话缓存中的对象。Person

以我的经验,我已经尝试过 #2 和 #3 并且最终总是会尝试重构来做 #1。

于 2009-12-14T20:26:09.053 回答