关于延迟加载的问题

时间:2011-04-23 18:36:00

标签: nhibernate lazy-loading

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

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

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;

这一切都在方法方法中一个接一个。你会去做5个查询还是只做一个?

如果我这样做怎么样

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

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

2 个答案:

答案 0 :(得分:6)

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

之后,它在记忆中;为什么会再次进入数据库呢?

答案 1 :(得分:1)

它还取决于ColumnA& amp;提到的Nhibernate映射。 ObjectB的ColumnB。如果它们恰好映射到延迟加载设置为true的单独的类/实体,那么当加载对象B时,ColumnA&未加载ColumnB映射实体。它们只有在被访问时才会被Nhibernate加载。