如何让 NHibernate ISession 缓存未通过主键检索的实体
我的“用户”实体几乎总是通过用户名检索,而不是通过其整数代理键检索。因为用户名不是主键,这意味着 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
看来答案其实是否定的。是的,如果您使用二级缓存,则否,如果您使用会话缓存。
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.
是的,您可以使用 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.
“会话缓存”实际上不是缓存,而是实体映射。
我的建议是,您使用在 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.