2010-01-06 35 views
0

在分層數據模型中,我有Parent和Child。家長有場[]和每個孩子也會有相同的字段的「計數」。我們會打電話給他們ChildField []這是ActiveRecordMediator的地方<T>?知道我不應該提前取孩子

public class Parent : ActiveRecordBase<Parent> 
{ 
    [HasMany] 
    IList<Field> Fields {get; set;} 
    [HasMany] 
    IList<Child> Children {get; set;} 
} 

public class Child : ActiveRecordBase<Child> 
{ 
    [HasMany] 
    IList<ChildField> ChildFields {get; set;} 
} 

現在,當你沒有任何領域內的家長......但我有500個子對象在它的集合中我肯定不想500個選擇(總計)每個孩子試圖加載它的childField集合。

我想我可以做懶惰但同時..當有childFields我不想它懶惰和渴望會更高性能是不是?

ActiveRecordMediator可能允許時提供的「呼叫上下文」的更多的知識我去像

public void FetchByChild(Child child){  
child.Parent.Fields.Count > 0 
     //Do the fetch 
    else 
     //return; 
} 

是否中介服務宗旨,以「跳過」分貝電話?

回答

1

這個問題有點混淆...... ActiveRecordMediator只是一個NHibernate ISession訪問器。它不能跳過查詢或類似的東西。它只執行您提供的查詢。

在NHibernate(和ActiveRecord當然),你可以使用懶惰或渴望提取每個查詢的基礎上。也就是說,如果對於特定的查詢,您知道您需要這些子實體,您可以熱切地獲取它們。如果你不這樣做,讓他們懶惰。

這些文章是一個偉大的介紹懶/預先加載:

還有其他的PERF的調整,你可以做,像batch fetching for collections

如果你的意思是從外部環境設置你的獲取策略,請參閱這些文章:

相關問題