2010-01-06 20 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

如果你的意思是从外部环境设置你的获取策略,请参阅这些文章:

相关问题