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); } } } }