Instead of eagerly loading the entire topic tree, as we currently do, instead update the CachedTopicRepository to support dynamically loading children, relationships, and potentially even extended attributes as requested.
Notes
- This will benefit from extended the
IsFullyLoaded properties into a LoadState enum with e.g., None, Fully, and Partially
- This will require support in
SqlTopicRepository:
- When a topic's
RangeLeft-RangeRight is 1, it's Children collection's LoadState can be set to Fully
- Even if the target relationships aren't in the
Load() or the cache, we can use their presence and matches to set LoadState for the relationships
- This won't be possible for
IncomingRelationships
- Ideally, we should support loading a "Skeleton", which includes all topics, all relationships, and all indexed attributes, but not the data- and memory-intensive extended attributes
- We will still need the ability via e.g. the
isRecursive argument to deep load an entire tree
- This should likely be the standard for the
Root:Configuration section, since it has a lot of internal cross-references
- This standard should be established in the
SampleActivator, not in the repositories themselves
Instead of eagerly loading the entire topic tree, as we currently do, instead update the
CachedTopicRepositoryto support dynamically loading children, relationships, and potentially even extended attributes as requested.Notes
IsFullyLoadedproperties into aLoadStateenum with e.g.,None,Fully, andPartiallySqlTopicRepository:RangeLeft-RangeRightis 1, it'sChildrencollection'sLoadStatecan be set toFullyLoad()or the cache, we can use their presence and matches to setLoadStatefor the relationshipsIncomingRelationshipsisRecursiveargument to deep load an entire treeRoot:Configurationsection, since it has a lot of internal cross-referencesSampleActivator, not in the repositories themselves