From: <fab...@us...> - 2011-06-19 20:57:45
|
Revision: 5960 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5960&view=rev Author: fabiomaulo Date: 2011-06-19 20:57:39 +0000 (Sun, 19 Jun 2011) Log Message: ----------- Fix NH-2125 Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Loader/Loader.cs Modified: trunk/nhibernate/src/NHibernate/Loader/Loader.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Loader/Loader.cs 2011-06-18 23:03:18 UTC (rev 5959) +++ trunk/nhibernate/src/NHibernate/Loader/Loader.cs 2011-06-19 20:57:39 UTC (rev 5960) @@ -518,28 +518,41 @@ if (keys.Count > 1) { //if we only returned one entity, query by key is more efficient + var subSelects = CreateSubselects(keys, queryParameters).ToArray(); - ISet<EntityKey>[] keySets = Transpose(keys); - - ILoadable[] loadables = EntityPersisters; - string[] aliases = Aliases; - foreach (EntityKey[] rowKeys in keys) { for (int i = 0; i < rowKeys.Length; i++) { - if (rowKeys[i] != null && loadables[i].HasSubselectLoadableCollections) + if (rowKeys[i] != null && subSelects[i] != null) { - SubselectFetch subselectFetch = - new SubselectFetch(aliases[i], loadables[i], queryParameters, keySets[i]); - - session.PersistenceContext.BatchFetchQueue.AddSubselect(rowKeys[i], subselectFetch); + session.PersistenceContext.BatchFetchQueue.AddSubselect(rowKeys[i], subSelects[i]); } } } } } + private IEnumerable<SubselectFetch> CreateSubselects(IList<EntityKey[]> keys, QueryParameters queryParameters) + { + // see NH-2123 NH-2125 + ISet<EntityKey>[] keySets = Transpose(keys); + ILoadable[] loadables = EntityPersisters; + string[] aliases = Aliases; + + for (int i = 0; i < loadables.Length; i++) + { + if (loadables[i].HasSubselectLoadableCollections) + { + yield return new SubselectFetch(aliases[i], loadables[i], queryParameters, keySets[i]); + } + else + { + yield return null; + } + } + } + internal void InitializeEntitiesAndCollections(IList hydratedObjects, object resultSetId, ISessionImplementor session, bool readOnly) { ICollectionPersister[] collectionPersisters = CollectionPersisters; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |