private static void IncludeCollection <TEntity, TIncludingEntity, TIncludedEntity>(
                QueryContext queryContext,
                IEnumerable <ValueBuffer> innerValueBuffers,
                Func <QueryContext, ValueBuffer, TIncludedEntity> innerShaper,
                TEntity entity,
                INavigation navigation,
                INavigation inverseNavigation,
                Action <TIncludingEntity, TIncludedEntity> fixup,
                bool trackingQuery)
                where TIncludingEntity : class, TEntity
                where TEntity : class
                where TIncludedEntity : class
            {
                if (entity is TIncludingEntity includingEntity)
                {
                    var collectionAccessor = navigation.GetCollectionAccessor();
                    collectionAccessor.GetOrCreate(includingEntity, forMaterialization: true);

                    if (trackingQuery)
                    {
                        queryContext.SetNavigationIsLoaded(entity, navigation);
                    }
                    else
                    {
                        NavigationExtensions.SetIsLoadedWhenNoTracking(navigation, entity);
                    }

                    foreach (var valueBuffer in innerValueBuffers)
                    {
                        var relatedEntity = innerShaper(queryContext, valueBuffer);

                        if (!trackingQuery)
                        {
                            fixup(includingEntity, relatedEntity);
                            if (inverseNavigation != null)
                            {
                                NavigationExtensions.SetIsLoadedWhenNoTracking(inverseNavigation, relatedEntity);
                            }
                        }
                    }
                }
            }
 private static void IncludeReference <TEntity, TIncludingEntity, TIncludedEntity>(
     QueryContext queryContext,
     TEntity entity,
     TIncludedEntity relatedEntity,
     INavigation navigation,
     INavigation inverseNavigation,
     Action <TIncludingEntity, TIncludedEntity> fixup,
     bool trackingQuery)
     where TIncludingEntity : class, TEntity
     where TEntity : class
     where TIncludedEntity : class
 {
     if (entity is TIncludingEntity includingEntity)
     {
         if (trackingQuery &&
             navigation.DeclaringEntityType.FindPrimaryKey() != null)
         {
             // For non-null relatedEntity StateManager will set the flag
             if (relatedEntity == null)
             {
                 queryContext.SetNavigationIsLoaded(includingEntity, navigation);
             }
         }
         else
         {
             NavigationExtensions.SetIsLoadedWhenNoTracking(navigation, includingEntity);
             if (relatedEntity != null)
             {
                 fixup(includingEntity, relatedEntity);
                 if (inverseNavigation != null &&
                     !inverseNavigation.IsCollection)
                 {
                     NavigationExtensions.SetIsLoadedWhenNoTracking(inverseNavigation, relatedEntity);
                 }
             }
         }
     }
 }