2011-04-23 98 views
0

我正在使用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; 

这是所有的方法方法接二连三发生的事情。你会去做5个查询还是只做一个?

怎么样,如果我这样做

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

这会断火2个查询或一个?

回答

6

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

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

1

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