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.

Reply via email to