如何让 NHibernate ISession 缓存未通过主键检索的实体

发布于 2024-10-20 19:28:53 字数 142 浏览 4 评论 0原文

我的“用户”实体几乎总是通过用户名检索,而不是通过其整数代理键检索。因为用户名不是主键,这意味着 ISession 不会缓存它并重复访问数据库以获取相同的数据。

有什么方法可以配置 NHibernate 来让 ISession 缓存按用户名检索的用户吗?

My 'user' entity is almost always retrieved by username, rather than by its integer surrogate key. Because the username is not the primary key, this means that the ISession won't cache it and repeatedly hits the database to get the same data.

Is there any way at all I can configure NHibernate to get the ISession to cache users retrieved by username?

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

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

发布评论

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

评论(3

乙白 2024-10-27 19:28:53

看来答案其实是否定的。是的,如果您使用二级缓存,则否,如果您使用会话缓存。

It seems the answer is in fact no. Yes, if you're using the second level cache, no if you are using the Session cache.

情定在深秋 2024-10-27 19:28:53

是的,您可以使用 NHibernate 的natural-id 元素来完成此任务。请参阅http://ayende.com/Blog/archive/ 2009/06/23/nhibernate-ltnatural-idgt.aspx,该示例正是您所要求的。

Yes, you can use NHibernate's natural-id element to accomplish this. See http://ayende.com/Blog/archive/2009/06/23/nhibernate-ltnatural-idgt.aspx, the example is exactly what you're asking for.

泪痕残 2024-10-27 19:28:53

“会话缓存”实际上不是缓存,而是实体映射。

我的建议是,您使用在 HttpContext 中存储项目的自定义提供程序为查询启用二级缓存。

The "session cache" is actually not a cache, but an entity map.

My suggestion is that you enable the 2nd level cache for queries using a custom provider that stores items in the HttpContext.

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