使用二级缓存的前置条件
你的NHibernate程序对数据库有独占的写访问权,其他的进程更新了数据库,NHibernate是不可能知道的。你操作数据库必需直接通过NHibernate,如果你调用存储过程,或者自己使用sql更新数据库,NHibernate也是不知道的。大批量更新和删除也是不更新二级缓存的
在ERP系统里面,有一些基础信息,产品分类,仓库,供应商等信息是很少变化的。而这些信息在各个单据里都会用到。假如把这些数据缓存起来可以很好的提高性能。方法一是GetXXX的方法里面使用缓存Cache,然后自己管理缓存的过期时间,在新增或更新时去掉缓存。
方法二是用Nhibernate的二级缓存,让它来帮你管理。 具体配置方法略过,园子里有详细的文章。
在使用过程中发现,如果实体没有配置缓存,而查询方法用了.SetCacheable(true),这样在实体的列表页(例如订单)就会出现Select N+1的问题。 解决的方法是分开两个查询方法,不需要缓存的实体的查询方法不要.SetCacheable(true)
如果受不了Nhibernate的诸多限制,那么还是自己在应用程序的层面上做缓存吧。
在越高的层面上做缓存,可以更有针对性,效果就会越好