|
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.
|