【问题标题】:NHibernate Short-Circuit Lazy Load to Pull from CacheNHibernate 短路延迟加载从缓存中拉取
【发布时间】:2021-10-08 17:02:06
【问题描述】:

我有一些遗留代码对大量“静态”记录进行大量延迟加载,并在 NHibernate Profiler 中产生大量 N+1 警报,我正在尝试修复这些警报。我发现通过配置二级缓存,它修复了许多 N+1,但许多仍然存在,因为实体被 他们的 ID 之外的东西访问,即外键值子实体指回其父实体,而不是子实体的主键。我的理解是,只有在实体通过 ID 访问时才使用二级缓存。我试图消除尽可能多的 N+1 问题,同时尽可能减少遗留代码中的代码更改。

有没有办法在 NHibernate 中缩短延迟加载,以便在调用 NHibernate 的延迟加载代码来执行数据库查询之前执行自定义代码?类似以下内容?

public class Customer
{
  public virtual IList<SomeStaticData> Foo
  {
    get
    {
      return CachedStuff.GetStaticData() ?? InvokeNHibernateLazyLoad();
    }

    set;
}

【问题讨论】:

    标签: nhibernate fluent-nhibernate


    【解决方案1】:

    我认为最好在这里查看这个答案,https://stackoverflow.com/a/27164913/13945347,然后查看 Ayende Rahien 的这篇文章,以更好地了解 N+1 问题的真正含义,https://ayende.com/blog/3732/solving-the-select-n-1-problem

    我认为解决问题的最佳方法不是按照您建议的方式解决问题。您不应该使 LazyLoad 短路,并且应该考虑到这一点来设计您的应用程序和模型。明确定义哪些模型应该被预先获取,哪些应该被延迟加载。

    【讨论】:

      猜你喜欢
      • 2011-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-15
      • 2010-11-04
      • 2013-12-10
      • 2011-10-17
      • 1970-01-01
      相关资源
      最近更新 更多