NHibernate,带有列表属性的QueryOver返回列表

时间:2018-10-30 15:18:09

标签: c# nhibernate

我有类似的课程:

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为空。

1 个答案:

答案 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();

如果这仍然引起您的问题,则可能是实体的一对多关系之间的映射文件有问题。