NHibernate,QueryOver 返回列表 属性
NHibernate, QueryOver returning list with list property
我有class喜欢:
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; }
}
所以我的每个 class 都与下面的 class 有一对多的关系。
如何编写最有效的查询,我收到包含 listOfA.propB 中记录的 A 类型列表 (List listOfA) 以及 listOfA.propB 中包含 listOfA.propB.propC 中的所有引用记录和等等。
请帮忙。
让我们首先假设:
var list = Session.QueryOver<A>().Where(x=>x.Name == "test").List().ToList();
returns 我列出了 3 个类型 A 的元素,但它的 属性 propB 是空的。
我建议使用 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();
如果这仍然给您带来问题,那么实体的一对多关系之间的映射文件可能有问题。
我有class喜欢:
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; }
}
所以我的每个 class 都与下面的 class 有一对多的关系。 如何编写最有效的查询,我收到包含 listOfA.propB 中记录的 A 类型列表 (List listOfA) 以及 listOfA.propB 中包含 listOfA.propB.propC 中的所有引用记录和等等。
请帮忙。
让我们首先假设:
var list = Session.QueryOver<A>().Where(x=>x.Name == "test").List().ToList();
returns 我列出了 3 个类型 A 的元素,但它的 属性 propB 是空的。
我建议使用 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();
如果这仍然给您带来问题,那么实体的一对多关系之间的映射文件可能有问题。