【问题标题】:Nhibernate LINQ - caching problemsNhibernate LINQ - 缓存问题
【发布时间】:2010-10-29 11:52:38
【问题描述】:

我有以下代码

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 查询,所以我知道一级缓存不起作用。 用于 nhibernate 的 LINQ 是否管理一级缓存?如果是,如何配置?

提前致谢。

【问题讨论】:

    标签: c# linq nhibernate


    【解决方案1】:

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

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

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

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

    AFAIK,NHibernate 的 Linq 对缓存没有什么特别的作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多