【问题标题】:Question about lazy loading关于延迟加载的问题
【发布时间】:2011-04-23 18:35:59
【问题描述】:

我正在使用 nhibernate,但我有一个问题。

假设我有一个对象(ObjectA)与另一个对象(ObjectB)有某种关系。

ObjectA -> TableA
ObjectB -> TableB

现在我进行查询并从 TableA 中获取结果,现在它在 ObjectA 中。

如果我这样做了

int b = ObjectA.ObjectB.ColumnA;

它会触发查询,对吗?因为它正在做延迟加载。

如果我这样做会发生什么

int b1 = ObjectA.ObjectB.ColumnA;
int b2 = ObjectA.ObjectB.ColumnA;
int b3 = ObjectA.ObjectB.ColumnA;
int b4 = ObjectA.ObjectB.ColumnA;

这都是在methodmethod里一个接一个。你会去做 5 个查询还是只做一个?

如果我这样做呢

  int b1 = ObjectA.ObjectB.ColumnA;
  string b2 = ObjectA.ObjectB.ColumnB;

这会触发 2 个查询还是一个?

【问题讨论】:

    标签: nhibernate lazy-loading


    【解决方案1】:

    所有这些方法只需要一次调用即可加载 ObjectB。

    之后,它在内存中;为什么会再次进入数据库?

    【讨论】:

      【解决方案2】:

      它还取决于针对 ColumnA 和针对 ObjectB 的 ColumnB 提到的 Nhibernate 映射。如果它们碰巧映射到延迟加载设置为 true 的单独类/实体,则在加载对象 B 时,不会加载 ColumnA 和 ColumnB 映射实体。只有当它们被访问时,它们才会被 Nhibernate 加载。

      【讨论】:

        猜你喜欢
        • 2021-04-23
        • 2012-08-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多