唯一索引上的NHibernate缓存?

唯一索引上的NHibernate缓存?,nhibernate,caching,unique-key,Nhibernate,Caching,Unique Key,我有几个类具有该对象特有的属性,例如,对于用户类,属性用户名永远不应该重复 NHibernate似乎不支持通过唯一键加载对象,然后以与Load()或Get()相同的方式缓存该唯一键。我说的对吗 如果我是,那么我只需要通过LoadByUniqueIndex(lambda属性,对象键)沿线的扩展方法来扮演自己的角色。是的,你是对的,NH不会直接从缓存中获取除id之外的任何实体。请注意,除id之外的所有内容都可能发生更改,需要在数据库中查找 缓存时要小心。“过早缓存是万恶之源”之类的话。说真的,如果您

我有几个类具有该对象特有的属性,例如,对于用户类,属性用户名永远不应该重复

NHibernate似乎不支持通过唯一键加载对象,然后以与Load()或Get()相同的方式缓存该唯一键。我说的对吗


如果我是,那么我只需要通过LoadByUniqueIndex(lambda属性,对象键)沿线的扩展方法来扮演自己的角色。

是的,你是对的,NH不会直接从缓存中获取除id之外的任何实体。请注意,除id之外的所有内容都可能发生更改,需要在数据库中查找

缓存时要小心。“过早缓存是万恶之源”之类的话。说真的,如果您不确定是否存在明显的性能问题,请不要编写自己的缓存

  • 编写将实体作为参数传递的代码,以避免多次加载同一实体
  • 避免使用比会话寿命更长的缓存。如果不通知所有更改,您将拥有过时的数据
  • 避免静态缓存,改用线程静态缓存。这样可以避免在会话之间共享数据,从而打破事务隔离
  • 如果确实需要,请使用二级缓存

如果你认为有一个静态缓存,只要应用程序运行,我可以告诉你,你最好避免它。如果付出合理的努力,它将无法正常工作。

好的,谢谢Stefan,我现在暂缓。至少我现在确实知道缓存是如何工作的。