/// <summary>
        /// Get a batch of all unloaded identifiers for a given persister that are present in the cached query.
        /// Once this method is called the unloaded identifiers for a given persister will be cleared in order to prevent
        /// double checking the same identifier.
        /// </summary>
        /// <param name="persister">The persister for the entities being loaded.</param>
        /// <param name="id">The identifier of the entity currently demanding load.</param>
        /// <returns>
        /// An array of identifiers that can be empty if the identifier was already checked or <see langword="null" />
        /// if the identifier is not present in the cached query.
        /// </returns>
        internal object[] GetEntityBatch(IEntityPersister persister, object id)
        {
            if (!_queryEntityKeys.TryGetValue(persister.EntityName, out var entityKeys))
            {
                return(null);                // The entity was not present in the cached query
            }

            var entityKey = new EntityKey(id, persister);

            if (_queryCheckedEntityKeys.TryGetValue(persister.EntityName, out var checkedEntityKeys) &&
                checkedEntityKeys.Contains(entityKey))
            {
                return(Array.Empty <object>());
            }

            if (!entityKeys.Contains(entityKey))
            {
                return(null);                // The entity was not present in the cached query
            }

            var result = new object[entityKeys.Count];
            var i      = 0;

            result[i++] = id;

            if (checkedEntityKeys == null)
            {
                checkedEntityKeys = new HashSet <EntityKey>();
                _queryCheckedEntityKeys.Add(persister.EntityName, checkedEntityKeys);
            }

            foreach (var key in entityKeys)
            {
                if (persister.IdentifierType.IsEqual(id, key.Identifier) || _persistenceContext.ContainsEntity(key))
                {
                    continue;
                }

                result[i++] = key.Identifier;
                checkedEntityKeys.Add(key);
            }

            entityKeys.Clear();

            return(result);
        }