We have a situation where we are trying to retrieve a couple of levels deep for an object graph using QueryOver. So if our top level is ParentEntity and our children are ChildEntitysA, ChildEntitysB and ChildEntitysC then we have something like the following code to retrieve our graph. var query = session.QueryOver<ParentEntity>(() => pAlias).Where(() => pAlias .Id == key).Future<ParentEntity>();
var queryA = session.QueryOver<ParentEntity>(() => pAlias).Left.JoinAlias(x => x.ChildEntitysA, () => caAlias).Where(() => pAlias.Id == key).Future< ParentEntity>(); var queryB = session.QueryOver<ParentEntity>(() => pAlias).Left.JoinAlias(x => x.ChildEntitysB, () => cbAlias).Where(() => pAlias.Id == key).Future< ParentEntity>(); var queryC = session.QueryOver<ParentEntity>(() => pAlias).Left.JoinAlias(x => x.ChildEntitysC, () => ccAlias).Where(() => pAlias.Id == key).Future< ParentEntity>(); return query.ToList(); This should generate 4 SQL statements in one single call to the database and brings back what we want. However, the SQL it generates does have some inefficiency as all of the child queries will contain in the SELECT statement all the columns of the parent as well as the child entity's columns, something akin to: SELECT parent.col0, parent.col1, parent.col2, parent.col3, .... parent.col99 FROM parent WHERE ..... SELECT parent.col0, parent.col1, parent.col2, parent.col3, .... parent. col99, childA.col0, childA.col1, childA.col2 .... childA.col99 FROM parent LEFT OUTER JOIN childA ON .... SELECT parent.col0, parent.col1, parent.col2, parent.col3, .... parent. col99, childB.col0, childB.col1, childB.col2 .... childB.col99 FROM parent LEFT OUTER JOIN childB ON .... SELECT parent.col0, parent.col1, parent.col2, parent.col3, .... parent. col99, childC.col0, childC.col1, childC.col2 .... childC.col99 FROM parent LEFT OUTER JOIN childC ON .... yet the query generated for the parent entity already contains all the necessary data! This does become a bit of an efficiency concern if we're returning multiples of the parent and the volume of data per child query rises accordingly. So, is there any way we can force nHibernate to not generate SQL to return all the parent entity's values for every single part of the query and just limit it to returning key columns only in the SQL? -- You received this message because you are subscribed to the Google Groups "nhusers" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/nhusers. For more options, visit https://groups.google.com/d/optout.
