开发者

NHibernate: How do I ignore the cache and go directly to the database?

Consider a typical NHiber开发者_运维问答nate context class.

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); }
    }
}

My question:

  • How could I rewrite the GetPerson method to ignore the cache and retrieve data directly from the database?


There are a couple of ways to approach this problem:

  1. The Hibernate guys will tell you that you probably should be opening a different session in order to retrieve the latest data from the database. They would point out that the intention of the session is to be scoped to a relatively short-lived unit of work.

  2. You could either put in a call to Session.Refresh() inside your GetPerson() method to always get the most current state from the database or you could expose that functionality through your own Refresh() method.

  3. Alternatively, if you have a handle on the Person object itself, you could also try a Session.Evict() to remove the Person object your session cache prior to loading it again.

In my experience, I've tried both #2 and #3 and have eventually always come around to refactoring to do #1.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜