在应用程序中,我有一个名为Cycles的引用表,它映射到Cycle实体。基本上大多数使用 NHibernate 映射的实体都保留对该表的引用。通常这些实体具有如下字段:
- 开始循环
- 修改周期
- 结束循环
- 循环
等等
即使我每个请求都使用会话,但我仍然在日志中看到大多数查询都发送到Cycles表。当我不是通过 Cycle ID 而是通过属于Cycle类型的其他属性进行查询时,就是这种情况。
Cycle类型几乎是不可变的,它具有Status属性,实际上这是唯一可以由 Service 类(如 CloseCycleService、Open 等)更改的属性。循环也不能删除,但可以插入。
所以我想尽量减少对Cycles表的查询次数。
我可以通过使用应用程序缓存将它缓存在 ASP .NET 中,并创建另一个抽象层,但在我这样做之前,我想知道 NHibernate 提供的选项以及缺点是什么?
我看到的唯一问题是多线程——即使Cycle几乎是不可变的(并且是无状态的),两个请求可能会同时尝试修改同一个实体,这可能会导致错误。但是……这几乎是不可能的。
那么你能建议我用 NHibernate 做什么来将 Cycles 表的所有内容存储在缓存中(哦,我也没有提到该表中的数据数量很小:每月 1 个周期,所以目前大约 20 行,并且每月会增长 1 行)并最小化向Cycles表发出的查询?