我正在尝试 NHibernate 中的二级缓存。使用此代码:
return session.Query<Payment>()
.Cacheable()
.OrderByDescending(payment => payment.Created)
.Skip((page - 1)*pageSize)
.Take(pageSize).ToArray();
如果实体不在缓存中,则会导致执行如下查询:
select ... from Payment where Id = 1
select ... from Payment where Id = 2
select ... from Payment where Id = 3
如果返回 100 行,则将执行其中的 100 行。即一个很大的性能问题。如果只执行这个查询会更好:
select ... from Payment where Id in (1,2,3)
缓存中不存在实体可能是因为未配置实体缓存、缓存大小有限或缓存中的实体已过期或从缓存中删除。
为了不被迫 100% 依赖实体缓存,是否可以更改 NHibernate 查询“丢失”实体数据的方式?