我有类似的课程:
public class A : BaseTableFields
{
public virtual string Name { get; set; }
public virtual IList<B> propB { get; set; }
}
public class B : BaseTableFields
{
public virtual A propA { get; set; }
public virtual IList<C> propC { get; set; }
}
public class C : BaseTableFields
{
public virtual B propB { get; set; }
public virtual IList<D> propD { get; set; }
}
因此,我的每个班级与其下面的班级都有一对多的关系。 如何编写最有效的查询,我收到类型A的列表(列表listOfA),其中包含listOfA.propB中的记录,并且listOfA.propB包含listOfA.propB.propC中的所有引用记录,依此类推。
请帮助。
让我们开始假设:
var list = Session.QueryOver<A>().Where(x=>x.Name == "test").List().ToList();
返回具有3个类型A的元素的列表,但其属性propB为空。
答案 0 :(得分:0)
我建议在NHibernate LINQ提供程序中使用'Fetch'或'FetchMany'函数。 this article中的示例说明了其实际功能,并显示了将生成的SQL。
正在处理您的示例,结果如下:
var list = Session.QueryOver<A>()
.Where(x => x.Name == "test")
.FetchMany(x => x.propB)
.ThenFetchMany(x => x.propC)
.ToList();
如果这仍然引起您的问题,则可能是实体的一对多关系之间的映射文件有问题。