【发布时间】:2012-04-07 20:48:10
【问题描述】:
我有几个数据类:
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,有几个孩子(又得到孩子等),每个孩子都有几个 Properties 和 Fotos。 我需要根据某个 RecordGroup 的所有 DataRecords,包括 Children、Properties 和 Fotos。
在原始 SQL 中执行此操作是一个带有几个连接的简单语句,但是当我尝试使用 linq 和 nhibernate 执行此操作时,它会导致 1500 个 Select N+1 语句,并且速度非常慢。
我已经尝试过.FetchMany( x => x.Children );
如何在 1 个查询中获取 1 个记录组的整个“数据树”?
提前致谢!!!!
【问题讨论】:
标签: c# nhibernate fetch recursive-query select-n-plus-1