一级缓存可以与 ICriteria 或其他 API 一起使用吗?

发布于 2024-10-16 07:53:50 字数 210 浏览 3 评论 0原文

NHibernate 中,使用 LoadGet 方法时,您可以轻松地从一级缓存中受益。但是 ICriteriaHQLLinq-to-NHibernateQueryOver 又如何呢?他们也使用一级缓存吗?

In NHibernate you can easily benefit from first level cache when using Load or Get methods. But what about ICriteria, HQL, Linq-to-NHibernate and QueryOver? Do they use first level cache too?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

晨曦÷微暖 2024-10-23 07:53:50

他们使用它来返回实体,但查询会直接进入数据库,除非您使用二级缓存。

考虑一下:

var fooUsingGet = session.Get<Foo>(fooId);
var fooQueryById = session.Query<Foo>().Single(f => f.Id == fooId);

执行两个查询(一个用于 Get,一个用于 Query),但两个变量都包含相同的对象引用。

现在,如果启用二级缓存、查询缓存,并为查询指定缓存:

var fooQueryById = session.Query<Foo>().Cacheable()
                          .Single(f => f.Id == fooId);
var fooQueryByIdAgain = session.Query<Foo>().Cacheable()
                               .Single(f => f.Id == fooId);

只会执行一个查询。

They use it for returning entities, but the queries go straight to the db unless you use the second level cache.

Consider this:

var fooUsingGet = session.Get<Foo>(fooId);
var fooQueryById = session.Query<Foo>().Single(f => f.Id == fooId);

Two queries are executed (one for the Get, one for the Query), but both variables contain the same object reference.

Now, if you enable the 2nd level cache, query caching, and specify caching for the query:

var fooQueryById = session.Query<Foo>().Cacheable()
                          .Single(f => f.Id == fooId);
var fooQueryByIdAgain = session.Query<Foo>().Cacheable()
                               .Single(f => f.Id == fooId);

Only one query will be executed.

凉城已无爱 2024-10-23 07:53:50

不,据我了解,他们没有。他们只使用二级缓存。一级缓存仅用于GetLoad

No, as I understand they don't. They use only second level cache. Firs level cache is only for Get and Load.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文