@@ -246,7 +246,7 @@ private static bool TraverseMembers(
246
246
if ( memberPaths . Count == 0 )
247
247
{
248
248
memberPath = currentEntityPersister != null || currentComponentType != null ? member . Path : null ;
249
- mappedType = GetType ( currentEntityPersister , currentType , member , sessionFactory , out _ ) ;
249
+ mappedType = GetType ( currentEntityPersister , currentType , member , sessionFactory ) ;
250
250
entityPersister = currentEntityPersister ;
251
251
component = currentComponentType ;
252
252
return mappedType != null ;
@@ -397,67 +397,44 @@ private static IType GetType(
397
397
IEntityPersister currentEntityPersister ,
398
398
IType currentType ,
399
399
MemberMetadata member ,
400
- ISessionFactoryImplementor sessionFactory ,
401
- out IEntityPersister persister )
400
+ ISessionFactoryImplementor sessionFactory )
402
401
{
403
402
// Not mapped
404
403
if ( currentType == null )
405
404
{
406
- persister = null ;
407
405
return null ;
408
406
}
409
407
410
- // Collection composite elements
411
- if ( currentEntityPersister == null )
408
+ IEntityPersister persister ;
409
+ if ( ! member . HasIndexer || currentEntityPersister == null )
412
410
{
413
- if ( member . ConvertType ! = null )
411
+ if ( member . ConvertType = = null )
414
412
{
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
418
414
}
419
415
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
422
419
}
423
420
424
- if ( ! member . HasIndexer )
421
+
422
+ if ( ! ( currentType is IAssociationType associationType ) )
425
423
{
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 ;
438
426
}
439
427
440
- // q.OneToMany[0]
441
- if ( currentType is IAssociationType associationType )
428
+ var queryableCollection = ( IQueryableCollection ) associationType . GetAssociatedJoinable ( sessionFactory ) ;
429
+ if ( member . ConvertType == null )
442
430
{
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]
455
432
return queryableCollection . ElementType ;
456
433
}
457
434
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]
461
438
}
462
439
463
440
private class MemberMetadataExtractor : NhExpressionVisitor
0 commit comments