我有以下代码
factory = new Configuration().Configure().BuildSessionFactory();
session = factory.OpenSession();
var query = session.Linq<Root>();
var data = query.ToList<Root>();
var data2 = query.ToList<Root>();
这个生成 2 个 SQL 查询,所以我知道一级缓存不起作用。 LINQ for nhibernate 是否管理一级缓存?如果是,如何配置?
提前致谢。
最佳答案
认为一级缓存一般会避免执行sql,这是一种误解。
查询始终在数据库上执行。这可以 100% 确保结果完全相同,无论实例是否已在内存中。例如,在使用连接或条件时,这可能很重要。如果查询实际上包含联接或 where 子句,则没有区别。
一级缓存确保如果它代表数据库中的相同实例,则返回相同的实例。 NHibernate执行sql,当它在内存中找到与查询返回的对象相同的对象时,它会返回缓存中的对象。但在执行sql之前它无法知道。
仅当您使用 session.Get
或 session.Load
时,NH 才会在找到实例时进行缓存查找并避免查询。
据我所知,Linq for NHibernate 对缓存没有任何特殊作用。
关于c# - Nhibernate LINQ - 缓存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4051546/