c# - Nhibernate LINQ - 缓存问题

标签 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>();

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

提前致谢。

最佳答案

认为一级缓存一般会避免执行sql,这是一种误解。

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

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

仅当您使用 session.Getsession.Load 时,NH 才会在找到实例时进行缓存查找并避免查询。

据我所知,Linq for NHibernate 对缓存没有任何特殊作用。

关于c# - Nhibernate LINQ - 缓存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4051546/

相关文章:

c# - dllimport 和 getProcAddress 之间的区别

C# 日期时间格式化

c# - 从文件 UWP (C#) 中读取 JSON

c# - 在 LINQ to SQL 中动态构造 "or"LIKE 查询

asp.net - Nhibernate QueryOver 如何使该查询使用异步?

c# - DataReader - 读取未知长度的数据

c# - SQL 的 LINQ 表达式中的空检查

c# - Linq 到 SQL : Where clause comparing a Nullable<DateTime> with a SQL datetime null column

c# - Nhibernate Map 复合元素

asp.net-mvc - 使用 ASP.NET MVC 中的内置 JsonResult 对 NHibernate 实体进行 JSON 序列化会产生循环依赖错误