1
我有一对夫妇的数据类:NHibernate的选择N + 1和递归
public class RecordGroup
{
public virtual DataRecord RootDataRecord;
}
public class DataRecord
{
public virtual string Name { get; set; }
public virtual RecordGroup RecordGroup { get; set; }
public virtual IList<DataRecord> Children { get; set; }
public virtual DataRecord Parent { get; set; }
public virtual IList<DataProperty> DataProperties { get; set; }
public virtual IList<Foto> Fotos { get; set; }
}
public class DataProperty
{
public virtual string Name { get; set; }
public virtual string Value { get; set; }
public virtual IList<Foto> Fotos { get; set; }
}
public class Foto
{
public virtual string Name { get; set; }
public virtual byte[] Data { get; set; }
}
所以1个RecordGroup“连接”到几个DataRecords,有几个孩子(这又带着小孩等)各他们有几个属性和照片。 根据某个RecordGroup,我需要所有的DataRecords包括Children,Properties和Fotos。
在原始SQL中这样做是一个简单的语句,只有几个连接,但是当我尝试使用linq和nhibernate来做到这一点时,会导致1500选择N + 1语句和巨大的减速。
我已经尝试过.FetchMany(x => x.Children);
怎么可能拿到1查询中1 Recordgroup的整体“的Datatree”?
在此先感谢!