@@ -246,7 +246,7 @@ private static bool TraverseMembers(
246246 if ( memberPaths . Count == 0 )
247247 {
248248 memberPath = currentEntityPersister != null || currentComponentType != null ? member . Path : null ;
249- mappedType = GetType ( currentEntityPersister , currentType , member , sessionFactory , out _ ) ;
249+ mappedType = GetType ( currentEntityPersister , currentType , member , sessionFactory ) ;
250250 entityPersister = currentEntityPersister ;
251251 component = currentComponentType ;
252252 return mappedType != null ;
@@ -397,67 +397,44 @@ private static IType GetType(
397397 IEntityPersister currentEntityPersister ,
398398 IType currentType ,
399399 MemberMetadata member ,
400- ISessionFactoryImplementor sessionFactory ,
401- out IEntityPersister persister )
400+ ISessionFactoryImplementor sessionFactory )
402401 {
403402 // Not mapped
404403 if ( currentType == null )
405404 {
406- persister = null ;
407405 return null ;
408406 }
409407
410- // Collection composite elements
411- if ( currentEntityPersister == null )
408+ IEntityPersister persister ;
409+ if ( ! member . HasIndexer || currentEntityPersister == null )
412410 {
413- if ( member . ConvertType ! = null )
411+ if ( member . ConvertType = = null )
414412 {
415- return TryGetEntityPersister ( member . ConvertType , sessionFactory , out persister )
416- ? persister . EntityMetamodel . EntityType // (Entity)q.OneToManyCompositeElement[0].Prop
417- : TypeFactory . GetDefaultTypeFor ( member . ConvertType ) ; // (long)q.OneToManyCompositeElement[0].Prop
413+ return currentType ; // q.Prop, q.OneToManyCompositeElement[0].Prop
418414 }
419415
420- persister = null ;
421- return currentType ;
416+ return TryGetEntityPersister ( member . ConvertType , sessionFactory , out persister )
417+ ? persister . EntityMetamodel . EntityType // (Entity)q.Prop, (Entity)q.OneToManyCompositeElement[0].Prop
418+ : TypeFactory . GetDefaultTypeFor ( member . ConvertType ) ; // (long)q.Prop, (long)q.OneToManyCompositeElement[0].Prop
422419 }
423420
424- if ( ! member . HasIndexer )
421+
422+ if ( ! ( currentType is IAssociationType associationType ) )
425423 {
426- if ( member . ConvertType != null )
427- {
428- persister = TryGetEntityPersister ( member . ConvertType , sessionFactory , out var newPersister )
429- ? newPersister
430- : currentEntityPersister ;
431- return newPersister != null
432- ? persister . EntityMetamodel . EntityType // (Entity)q.Prop
433- : TypeFactory . GetDefaultTypeFor ( member . ConvertType ) ; // (long)q.Prop
434- }
435-
436- persister = currentEntityPersister ;
437- return currentType ; // q.Prop
424+ // q.Prop[0]
425+ return null ;
438426 }
439427
440- // q.OneToMany[0]
441- if ( currentType is IAssociationType associationType )
428+ var queryableCollection = ( IQueryableCollection ) associationType . GetAssociatedJoinable ( sessionFactory ) ;
429+ if ( member . ConvertType == null )
442430 {
443- var queryableCollection = ( IQueryableCollection ) associationType . GetAssociatedJoinable ( sessionFactory ) ;
444- if ( member . ConvertType != null )
445- {
446- return TryGetEntityPersister ( member . ConvertType , sessionFactory , out persister )
447- ? persister . EntityMetamodel . EntityType // (Entity)q.Prop
448- : TypeFactory . GetDefaultTypeFor ( member . ConvertType ) ; // (long)q.Prop
449- }
450-
451- persister = queryableCollection . ElementType . IsEntityType
452- ? queryableCollection . ElementPersister
453- : null ;
454-
431+ // q.OneToMany[0]
455432 return queryableCollection . ElementType ;
456433 }
457434
458- // q.Prop[0]
459- persister = null ;
460- return null ;
435+ return TryGetEntityPersister ( member . ConvertType , sessionFactory , out persister )
436+ ? persister . EntityMetamodel . EntityType // (Entity)q.OneToMany[0]
437+ : TypeFactory . GetDefaultTypeFor ( member . ConvertType ) ; // (long)q.OneToMany[0]
461438 }
462439
463440 private class MemberMetadataExtractor : NhExpressionVisitor
0 commit comments