随笔 - 435  文章 - 0  评论 - 111  阅读 - 62万 
使用二级缓存的前置条件 

你的NHibernate程序对数据库有独占的写访问权,其他的进程更新了数据库,NHibernate是不可能知道的。你操作数据库必需直接通过NHibernate,如果你调用存储过程,或者自己使用sql更新数据库,NHibernate也是不知道的。大批量更新和删除也是不更新二级缓存的

 

在ERP系统里面,有一些基础信息,产品分类,仓库,供应商等信息是很少变化的。而这些信息在各个单据里都会用到。假如把这些数据缓存起来可以很好的提高性能。方法一是GetXXX的方法里面使用缓存Cache,然后自己管理缓存的过期时间,在新增或更新时去掉缓存。

方法二是用Nhibernate的二级缓存,让它来帮你管理。 具体配置方法略过,园子里有详细的文章。

 

在使用过程中发现,如果实体没有配置缓存,而查询方法用了.SetCacheable(true),这样在实体的列表页(例如订单)就会出现Select N+1的问题。 解决的方法是分开两个查询方法,不需要缓存的实体的查询方法不要.SetCacheable(true)

 

 如果受不了Nhibernate的诸多限制,那么还是自己在应用程序的层面上做缓存吧。 

在越高的层面上做缓存,可以更有针对性,效果就会越好
posted on   Gu  阅读(378)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
点击右上角即可分享
微信分享提示