@@ -42,41 +42,7 @@ public abstract class EntitySetBase : SessionBound,
4242 private static readonly Parameter < Tuple > keyParameter = new Parameter < Tuple > ( WellKnown . KeyFieldName ) ;
4343 internal static readonly Parameter < Entity > ownerParameter = new Parameter < Entity > ( "Owner" ) ;
4444
45- private static readonly Func < FieldInfo , EntitySetBase , EntitySetTypeState > BuildEntitySetTypeState = ( FieldInfo field , EntitySetBase entitySet ) => {
46- var association = field . Associations . Last ( ) ;
47- var query = association . UnderlyingIndex . GetQuery ( ) . Seek ( context => context . GetValue ( keyParameter ) ) ;
48- var seek = entitySet . Session . Compile ( query ) ;
49- var ownerDescriptor = association . OwnerType . Key . TupleDescriptor ;
50- var targetDescriptor = association . TargetType . Key . TupleDescriptor ;
51-
52- var itemColumnOffsets = association . AuxiliaryType == null
53- ? association . UnderlyingIndex . ValueColumns
54- . Where ( ci => ci . IsPrimaryKey )
55- . Select ( ci => ci . Field . MappingInfo . Offset )
56- . ToList ( )
57- : Enumerable . Range ( 0 , targetDescriptor . Count ) . ToList ( ) ;
58-
59- var keyFieldCount = ownerDescriptor . Count + itemColumnOffsets . Count ;
60- var keyFieldTypes = ownerDescriptor
61- . Concat ( itemColumnOffsets . Select ( i => targetDescriptor [ i ] ) )
62- . ToArray ( keyFieldCount ) ;
63- var keyDescriptor = TupleDescriptor . Create ( keyFieldTypes ) ;
64-
65- var map = Enumerable . Range ( 0 , ownerDescriptor . Count )
66- . Select ( i => new Pair < int , int > ( 0 , i ) )
67- . Concat ( itemColumnOffsets . Select ( i => new Pair < int , int > ( 1 , i ) ) )
68- . ToArray ( keyFieldCount ) ;
69- var seekTransform = new MapTransform ( true , keyDescriptor , map ) ;
70-
71- Func < Tuple , Entity > itemCtor = null ;
72- if ( association . AuxiliaryType != null ) {
73- itemCtor = DelegateHelper . CreateDelegate < Func < Tuple , Entity > > ( null ,
74- association . AuxiliaryType . UnderlyingType , DelegateHelper . AspectedFactoryMethodName ,
75- Array . Empty < Type > ( ) ) ;
76- }
77-
78- return new EntitySetTypeState ( seek , seekTransform , itemCtor , entitySet . GetItemCountQueryDelegate ( field ) ) ;
79- } ;
45+ private static readonly Func < FieldInfo , EntitySetBase , EntitySetTypeState > EntitySetTypeStateFactory = BuildEntitySetTypeState ;
8046
8147 private readonly Entity owner ;
8248 private readonly CombineTransform auxilaryTypeKeyTransform ;
@@ -958,7 +924,44 @@ private static Key GetOwnerKey(Persistent owner)
958924 private EntitySetTypeState GetEntitySetTypeState ( )
959925 {
960926 EnsureOwnerIsNotRemoved ( ) ;
961- return Session . StorageNode . InternalEntitySetCache . GetOrAdd ( Field , BuildEntitySetTypeState , this ) ;
927+ return Session . StorageNode . InternalEntitySetCache . GetOrAdd ( Field , EntitySetTypeStateFactory , this ) ;
928+ }
929+
930+ private static EntitySetTypeState BuildEntitySetTypeState ( FieldInfo field , EntitySetBase entitySet )
931+ {
932+ var association = field . Associations . Last ( ) ;
933+ var query = association . UnderlyingIndex . GetQuery ( ) . Seek ( context => context . GetValue ( keyParameter ) ) ;
934+ var seek = entitySet . Session . Compile ( query ) ;
935+ var ownerDescriptor = association . OwnerType . Key . TupleDescriptor ;
936+ var targetDescriptor = association . TargetType . Key . TupleDescriptor ;
937+
938+ var itemColumnOffsets = association . AuxiliaryType == null
939+ ? association . UnderlyingIndex . ValueColumns
940+ . Where ( ci => ci . IsPrimaryKey )
941+ . Select ( ci => ci . Field . MappingInfo . Offset )
942+ . ToList ( )
943+ : Enumerable . Range ( 0 , targetDescriptor . Count ) . ToList ( ) ;
944+
945+ var keyFieldCount = ownerDescriptor . Count + itemColumnOffsets . Count ;
946+ var keyFieldTypes = ownerDescriptor
947+ . Concat ( itemColumnOffsets . Select ( i => targetDescriptor [ i ] ) )
948+ . ToArray ( keyFieldCount ) ;
949+ var keyDescriptor = TupleDescriptor . Create ( keyFieldTypes ) ;
950+
951+ var map = Enumerable . Range ( 0 , ownerDescriptor . Count )
952+ . Select ( i => new Pair < int , int > ( 0 , i ) )
953+ . Concat ( itemColumnOffsets . Select ( i => new Pair < int , int > ( 1 , i ) ) )
954+ . ToArray ( keyFieldCount ) ;
955+ var seekTransform = new MapTransform ( true , keyDescriptor , map ) ;
956+
957+ Func < Tuple , Entity > itemCtor = null ;
958+ if ( association . AuxiliaryType != null ) {
959+ itemCtor = DelegateHelper . CreateDelegate < Func < Tuple , Entity > > ( null ,
960+ association . AuxiliaryType . UnderlyingType , DelegateHelper . AspectedFactoryMethodName ,
961+ Array . Empty < Type > ( ) ) ;
962+ }
963+
964+ return new EntitySetTypeState ( seek , seekTransform , itemCtor , entitySet . GetItemCountQueryDelegate ( field ) ) ;
962965 }
963966
964967 private int ? GetItemIndex ( EntitySetState state , Key key )
0 commit comments