当它被调用两次时,第二次调用不会在数据库上重新运行查询,查询缓存会起作用。
var query = from p in session.Query<Product>()
where p.YearIntroduced >= 0
select p;
query = query.Cacheable();
var t = query.ToList();
但是,当我在查询上添加一些连接时,查询缓存不再起作用,因此当它被调用两次时,查询也会在数据库上被调用两次:
var query = from p in session.Query<Product>()
join l in session.Query<ProductLanguage>()
on p.ProductId equals l.ProductId
where p.YearIntroduced >= 0
select new { p, l };
query = query.Cacheable();
var t = query.ToList();
可能是一个愚蠢的问题,查询缓存是否只能在一个表上工作,因此在添加连接时,查询不再可缓存?
即使查询有连接,有什么解决方案可以使查询缓存?
另一个奇怪的是,如果我删除 where 子句,使用 join 的查询缓存将起作用。当它被调用两次时,第二次调用不会在数据库上重新运行查询,查询缓存有效
var query = from p in session.Query<Product>()
join l in session.Query<ProductLanguage>()
on p.ProductId equals l.ProductId
select new { p, l };
query = query.Cacheable();
var t = query.ToList();
但是,当您不能在其上放置 where 子句时,查询有什么用呢?
这是一个 NHibernate 错误,还是我只是以错误的方式使用查询缓存?