[英]How to fetch all entities - Nhibernate select n+1 with multi level deep
public class Grandfather
{
private int Id;
private int Version;
private IList<Father> Childrens;
}
public class Father
{
private int Id;
private int Version;
private IList<double> ChildrensAges;
private IList<double> ChildrenGradesOnMath;
private IList<int> ChildrenNumberOfFriends;
}
for Grandfather: 对于祖父:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace="Entities" assembly="Entities">
<class name="Grandfather" table="Grandfather">
<id name="Id" column="Id" type="Int32" unsaved-value="0">
<generator class="assigned" />
</id>
<version name="Version" column="Version" type="Int32" unsaved-value="0" access="property"/>
<bag name="Childrens" table="Childrens" cascade="all-delete-orphan" fetch="join" lazy="false">
<key column="GrandfatherOwnerId"/>
<one-to-many class="Father"
</bag>
</class>
</hibernate-mapping>
for Father: 对于父亲:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace="Entities" assembly="Entities">
<class name="Father" table="Father">
<id name="Id" column="Id" type="Int32" unsaved-value="0">
<generator class="assigned" />
</id>
<version name="Version" column="Version" type="Int32" unsaved-value="0" access="property"/>
<list name="ChildrensAges" table="ChildrensAges" fetch="join" lazy="false">
<key column="ChildrensAgesDBId"/>
<index column="Ordinal"/>
<element column="Value" type="System.Double"/>
</list>
<list name="ChildrenGradesOnMath" table="ChildrenGradesOnMath" fetch="join" lazy="false">
<key column="ChildrenGradesOnMathDBId"/>
<index column="Ordinal"/>
<element column="Value" type="System.Double"/>
</list>
<list name="ChildrenNumberOfFriends" table="ChildrenNumberOfFriends" fetch="join" lazy="false">
<key column="ChildrenNumberOfFriendsDBId"/>
<index column="Ordinal"/>
<element column="Value" type="System.Int"/>
</list>
</class>
</hibernate-mapping>
I want to fetch all Grandfathers from the DB. 我想从数据库中获取所有祖父。 When I use the query (on DB with 10,000 grandfathers, each grandfather has one child): 当我使用查询时(在有10,000个祖父的数据库上,每个祖父都有一个孩子):
IList queryEntities = session.CreateQuery("from Grandfather").List();
It generate 10,000*5 queries and it take too much time. 它生成10,000 * 5个查询,并且花费太多时间。
What is the best way to fetch all the data (I need it all so it have to be eager) in one query? 在一个查询中获取所有数据的最佳方法是什么(我需要它,所以必须急切)?
Thanks in advanced :-) 提前致谢 :-)
Use FetchMany 使用FetchMany
something like the following 类似以下内容
var grandfathers = (from grin session.Query<Grandfather>()
select gr)
.FetchMany(f => f.Childrens)
.ThenFetch(fc = > fc.ChildrensAges)
.ToList();
and you might extend this to ThenFetch or ThenFetchMany to get items on Father. 您可以将其扩展到ThenFetch或ThenFetchMany以在父亲上获取项目。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.