【发布时间】:2011-02-04 15:33:43
【问题描述】:
我的 DTO 有一个我的数据库使用的 ID,通常是一个自动递增的 INT。一般来说,我的应用程序从不关心这个 ID 字段,它倾向于通过它们的 Name 属性来查找 DTO。在我的数据访问层中产生了这种方法:
public T GetByName(string name)
{
return (T) Session
.CreateCriteria(typeof (T))
.Add(Expression.Eq("Name", name))
.UniqueResult();
}
现在,我注意到,由于这是我加载绝大多数 DTO 的方式,nHibernate 没有缓存结果。我已经能够通过 SQL Profiler 观察到,每次调用这个方法都会导致到数据库的往返,即使我确定我在我的工作单元期间加载了这个特定的对象(一个HTTP 事务)。
此外,我读到的是,当您调用 .Load() 时,nHibernate 会将 DTO 缓存在一级缓存中。
所以,我的问题是:有没有办法配置 nHibernate 以在以这种方式加载后将我的 DTO 放入一级缓存,或者我是否需要找到另一种方法来减少我的数据库往返?
【问题讨论】:
标签: nhibernate