C# Nhibernate LINQ-缓存问题

C# Nhibernate LINQ-缓存问题,c#,linq,nhibernate,C#,Linq,Nhibernate,我有以下代码 factory = new Configuration().Configure().BuildSessionFactory(); session = factory.OpenSession(); var query = session.Linq<Root>(); var data = query.ToList<Root>(); var data2 = query.ToList<Root>(); factory=newconfiguration(

我有以下代码

factory = new Configuration().Configure().BuildSessionFactory();
session = factory.OpenSession();
var query = session.Linq<Root>();
var data = query.ToList<Root>();
var data2 = query.ToList<Root>();
factory=newconfiguration().Configure().BuildSessionFactory();
session=factory.OpenSession();
var query=session.Linq();
var data=query.ToList();
var data2=query.ToList();
这一个生成了2个SQL查询,所以我知道一级缓存不起作用。 LINQ for nhibernate是否管理一级缓存?如果是,如何配置


提前感谢。

一级缓存通常避免执行sql,这是一种误解

查询总是在数据库上执行。这可以100%确保结果完全相同,无论实例是否已在内存中。例如,在使用联接或条件时,这可能很重要。如果查询实际包含联接或where子句,则没有区别

如果一级缓存表示数据库中的同一实例,则确保返回同一实例。NHibernate执行sql,当它在内存中找到与查询返回的对象相同的对象时,它将返回缓存中的对象。但在执行sql之前,它无法知道

只有在使用
session.Get
session.Load
时,NH才会执行缓存查找,并在找到实例时避免查询

好了,Linq for NHibernate对缓存没有什么特别的作用