public void LoadEntities()
        {
            if (!UnloadedIds.Any())
            {
                return;
            }

            var dbEntityReader = new EntityReader <TEntity>(Connection);
            var entities       = dbEntityReader.AsQueryable().WherePropertyMatches(ForeignProperty, UnloadedIds);

            foreach (var entity in entities)
            {
                Update(entity, EntityEntryState.NoChanges);
            }

            UnloadedIds.Clear();
        }
        public new IEnumerator <TEntity> GetEnumerator()
        {
            //Enumerate loaded entities
            var result = Entries.Select(e => e.Entity);

            using (var enumerator = result.GetEnumerator())
            {
                while (enumerator.MoveNext())
                {
                    yield return(enumerator.Current);
                }
            }

            //Enumerate list of unloaded IDs and load them in one at a time
            if (UnloadedIds.Any())
            {
                var dbEntityReader   = new EntityReader <TEntity>(Connection);
                var unloadedEntities = dbEntityReader.AsQueryable().WherePropertyMatches(ForeignProperty, UnloadedIds);

                using (var unloadedEnumerator = unloadedEntities.GetEnumerator())
                {
                    while (unloadedEnumerator.MoveNext())
                    {
                        var loadedEntity = unloadedEnumerator.Current;

                        //Load the data into the collection so we don't need to query it again
                        Update(loadedEntity, EntityEntryState.NoChanges);

                        //Remove from unloaded entity collection
                        var foreignId = ForeignProperty.GetValue(loadedEntity);
                        UnloadedIds.Remove(foreignId);

                        yield return(loadedEntity);
                    }
                }
            }
        }