Nhibernate LINQ - 缓存问题

eka*_*808 2 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>();
Run Code Online (Sandbox Code Playgroud)

这个生成2个SQL查询,所以我知道第一级缓存不起作用.LINQ for nhibernate管理一级缓存吗?如果是,如何配置?

先谢谢了.

Ste*_*ger 6

一般来说,第一级缓存可以避免执行sql,这是一种误解.

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

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

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

AFAIK,Linq for NHibernate对缓存没有什么特别之处.