Cascade
Loading...
Searching...
No Matches
Buzzware.Cascade.CascadeDataLayer Class Reference

Methods to manipulate properties and association relationships between models. More...

Inheritance diagram for Buzzware.Cascade.CascadeDataLayer:

Public Member Functions

async Task SetModelCollectionProperty (object target, CascadePropertyInfo propertyInfo, object value)
 Sets a collection property on a model. It ensures the property is enumerable and makes necessary type conversions.
async Task HasManyReplace (SuperModel model, string property, IEnumerable< object > models)
 Replaces the value of the given HasMany property with the given IEnumerable of models and updates the caches appropriately. This is needed eg. when you add models to a HasMany association.
async Task HasManyAddItem (SuperModel model, string property, SuperModel hasManyItem)
 Adds an item to the HasMany association of a model, updating both the property and the caches.
async Task HasManyReplaceItem (SuperModel model, string property, SuperModel hasManyItem)
 Replaces an item in the association property and cached collection, matching by id.
async Task HasManyRemoveItem (SuperModel model, string property, SuperModel hasManyItem)
 Removes an item from the association property and cached collection, matching by id.
async Task HasManyEnsureItem (SuperModel model, string property, SuperModel hasManyItem)
 Ensures that an item occurs in the association property and cached collection, matching by id (adds or replaces as necessary to avoid duplicates).
async Task UpdateHasOne (SuperModel model, string property, object value)
 Replaces the value of the given HasOne property with the given model.
Task SetAssociation (object target, string propertyName, object value)
 Use this when you only want to set an association property to a value you already have. Consider using UpdateHasMany/UpdateHasOne/UpdateBelongsTo instead. This method does not update the caches.
async Task SetAssociation (IEnumerable targets, string propertyName, object value)
 Use this when you only want to set an association property to a value you already have. Consider using UpdateHasMany/UpdateHasOne/UpdateBelongsTo instead. This method does not update the caches.
async Task< byte[]?> BlobGet (string path, int? freshnessSeconds=null, int? fallbackFreshnessSeconds=null, bool? hold=null, long? sequenceBeganMs=null)
 Retrieve a binary blob identified by the given path with optional caching and freshness parameters.
async Task< Stream?> BlobGetStream (string path, int? freshnessSeconds=null, int? fallbackFreshnessSeconds=null, bool? hold=null, long? sequenceBeganMs=null)
 Retrieve a binary blob identified by the given path as a Stream, with optional caching and freshness parameters.
Task< OpResponseBlobGetResponse (string path, int? freshnessSeconds=null, int? fallbackFreshnessSeconds=null, bool? hold=null, long? sequenceBeganMs=null)
 Retrieves a response containing a binary blob from the data layer based on the specified path.
async Task< string?> BlobGetFilePath (string path, int? freshnessSeconds=null, int? fallbackFreshnessSeconds=null, bool? hold=null, long? sequenceBeganMs=null)
 Retrieve a binary blob identified by the given path as an absolute file path, with optional caching and freshness parameters.
async Task BlobDownload (string path, int? freshnessSeconds=null, int? fallbackFreshnessSeconds=null, bool? hold=null, long? sequenceBeganMs=null)
 Download a binary blob identified by the given path to a local cache. Does not return the data. Use BlobGet/BlobGetStream to get the data.
async Task< bool > BlobExists (string path, int? freshnessSeconds=null, int? fallbackFreshnessSeconds=null, bool? hold=null, long? sequenceBeganMs=null)
 Test whether blob identified by the given path as an absolute file path exists, with optional caching and freshness parameters. For now this uses BlobGetFilePath which means it will download the file if it exists, but in future it should be optimised to only detect existence on the origin.
Task< OpResponseBlobGetFilePathResponse (string path, int? freshnessSeconds=null, int? fallbackFreshnessSeconds=null, bool? hold=null, long? sequenceBeganMs=null)
 Retrieves a response containing a binary blob from the data layer based on the specified path.
async Task< long?> BlobGetArrivedAt (string path)
 Get the arrivedAt timestamp of a cached blob, from the nearest cache layer holding it. Never contacts the origin. Where the cache layer can give an absolute file path, this is just a file stat - no streams are opened and no RequestOp is processed.
async Task< bool > BlobHasExpired (string path, int? fallbackSeconds=null)
async Task BlobPut (string path, byte[] data)
 Store a binary blob at the specified path.
Task< OpResponseBlobPutResponse (string path, byte[] data)
 Store a binary blob at the specified path, returning the OpResponse.
async Task BlobPut (string path, Stream stream)
 Store a binary blob stream at the specified path. One day this could be made more efficient for large blobs.
Task< OpResponseBlobPutResponse (string path, Stream stream)
 Store a binary blob at the specified path, returning the OpResponse.
async Task BlobDestroy (string path)
 Removes a binary blob from the specified path, effectively deleting it.
Task< OpResponseBlobDestroyResponse (string path)
 Generate an operation response for destroying a binary blob at the specified path.
async Task< object?> SetFromBlobProperty (SuperModel model, string property, byte[] blob)
 Sets the property of the given model from a binary blob using the specified property's conversion attribute.
async Task BlobClear (string blobPath)
 Removes a binary blob of the specified path from the cache (if exists) without affecting the origin.
async Task ClearBlobs (bool exceptHeld=true, DateTime? olderThan=null)
async Task ClearCollection< Model > (string collectionName)
 Clear a collection from all cache layers for the specified collection type.
async Task< IEnumerable< object > > SetCollection< Model > (string collectionName, IEnumerable< object > ids)
 Replace a collection with a specified set of ids in all cache layers.
async Task< IEnumerable< object > > CollectionPrepend< Model > (string collectionName, object id)
 Add a single id to the beginning of a collection in all cache layers.
async Task< IEnumerable< object > > CollectionAppend< Model > (string collectionName, object id)
 Add a single id to the end of a collection in all cache layers.
Task< IReadOnlyList< object > > CollectionReplaceItem< Model > (string collectionName, object item)
 Replaces an item in the collection only if it already exists.
Task< IReadOnlyList< object > > CollectionRemoveItem< Model > (string collectionName, object item)
 Removes an item from the collection if it exists.
Task< IReadOnlyList< object > > CollectionEnsureItem< Model > (string collectionName, object item)
 Ensures that an item exists in the collection - by replacing or adding.
async Task SetCacheWhereCollection (Type modelType, string propertyName, string propertyValue, IEnumerable< object > collection)
 Replaces the cached values for HasMany/HasOne type associations (not typically used) Updates all cache layers with the provided association collection.
async Task SetCacheRecord (object id, object model, long? timeMs=null)
 Replace a single cached model with a new version in all caches.
async Task< long?> GetArrivedAt< Model > (object id)
 Get the arrivedAt timestamp of a cached record, from the nearest cache layer holding it.
async Task< bool > HasExpired< Model > (object id, int? fallbackSeconds=null)
async Task< long?> GetCollectionArrivedAt< Model > (string name)
 Get the arrivedAt timestamp of a cached collection, from the nearest cache layer holding it.
async Task< bool > HasCollectionExpired< Model > (string name, int? fallbackSeconds=null)
async Task ClearLayer (int index, bool exceptHeld=true)
 Clears all content from a specified cache layer, with the option to preserve held entries.
async Task ClearLayers (bool exceptHeld=true, DateTime? olderThan=null)
 Clears all content from all cache layers, with options to preserve held entries and clear content based on age.
async Task ClearCache (IEnumerable< Type > modelTypes, bool clearBlobs=false, bool exceptHeld=true, DateTime? olderThan=null)
 CascadeDataLayer (ICascadeOrigin origin, IEnumerable< ICascadeCache > cacheLayers, CascadeConfig config, ICascadePlatform cascadePlatform, ErrorControl errorControl, CascadeJsonSerialization serialization)
 CascadeDataLayer main constructor.
void RaisePropertyChanged ([CallerMemberName] string propertyName=null)
 Raises this object's PropertyChanged event.
async Task EnsureAuthenticated (Type? type=null)
 Ensures that the user is authenticated. If not, it will attempt to authenticate the user based on the provided type.
IEnumerable< Type > ListModelTypes ()
 Obtains a list of model types that the Origin can handle.
string MetaResolvePath (string path)
 Resolves and returns the absolute path for the given relative meta path. Ensures that the path does not contain any directory traversal sequences ('..').
void MetaSet (string path, string? value)
 Sets a value in the metadata store for the specified key path. If the value is null, the key is removed from the store.
string? MetaGet (string path)
 Retrieves the value associated with the specified key path in the metadata store. Returns null if the key does not exist.
T? MetaJsonGet< T > (string key)
void MetaJsonSet< T > (string key, T? value)
bool MetaExists (string path)
 Checks whether a key exists in the metadata store for the given path.
IEnumerable< string > MetaList (string path, bool recursive=false, bool sort=true)
 Lists all keys under the specified path in the metadata store. Options to list recursively and sort the results.
void MetaClearPath (string path, DateTime? olderThan=null, bool recursive=false)
 Clears files from the specified metadata path based on optional filter criteria. Can remove files older than a specified date and can operate recursively.
void MetaClearAll ()
 Clears all metadata files and folders in the configured root meta path.
void Hold< Model > (object id)
 Holds a model of the specified type and identifier by creating a corresponding metadata entry.
void Hold (object model)
 Holds an object model by its type and identifier value.
void Hold (Type modelType, object id)
 Holds a model of a specified type and identifier by creating a metadata entry.
bool IsHeld< Model > (object id)
 Checks if a model of the specified type and identifier is currently held.
void Unhold< Model > (object id)
 Unholds a model of the specified type and identifier by removing the metadata entry.
void HoldBlob (string path)
 Holds a blob path by creating a corresponding metadata entry.
void UnholdBlob (string path)
 Unholds a blob path by removing the corresponding metadata entry.
bool IsHeldBlob (string path)
 Checks if a blob path is currently held in the metadata.
IEnumerable< object > ListHeldIds< Model > ()
 Lists all identifiers of a specified model type that are currently held.
IEnumerable< object > ListHeldIds (Type type)
 Lists all identifiers of the specified type currently held in metadata. Differentiates between blob and non-blob types.
IEnumerable< object > ListHeldBlobPaths ()
 Lists all blob paths currently held in metadata.
void HoldCollection< Model > (string name)
 Holds a named collection for a model type by creating a corresponding metadata entry.
void HoldCollection (Type modelType, string name)
 Holds a named collection for a specified model type by creating a metadata entry.
void UnholdCollection< Model > (string name)
 Unholds a named collection for a model type by removing the corresponding metadata entry.
bool IsCollectionHeld< Model > (string name)
 Checks if a named collection for a model type is currently held.
IEnumerable< object > ListHeldCollections (Type modelType)
 Lists all named collections of a specified model type that are currently held.
void UnholdAll (Type modelType, DateTime? olderThan=null)
 Unholds all instances and collections of the specified model type. Optionally filter out entries older than a specified date.
void UnholdAllBlobs (DateTime? olderThan=null)
void UnholdAll (DateTime? olderThan)
 Unholds all models and collections, clearing all associated metadata. Can target only metadata entries older than a specified date.
void UnholdAll ()
 Unholds all associations in both model and collection types, clearing all metadata.
JsonNode SerializeRequestOp (RequestOp op, out IReadOnlyDictionary< string, byte[]> externalContent)
 Serializes a RequestOp object into a JsonNode while also extracting and returning any external content.
RequestOp DeserializeRequestOp (string? s, out IReadOnlyDictionary< string, string > externals)
 Deserializes a JSON string into a RequestOp object while extracting any external links.
async Task< string > AddPendingChange (RequestOp op)
 Adds a new pending RequestOp change to the system and saves it in a designated path.
string ExternalBinaryPathFromPendingChangePath (string filePath, string externalPath)
 Converts a pending change file path to its corresponding binary file path.
IEnumerable< string > GetChangesPendingList ()
 Retrieves a list of pending change filenames from the configured directory.
async Task< List< Tuple< string, RequestOp, IReadOnlyDictionary< string, string >?> > > GetChangesPending ()
 Retrieves and reconstructs a list of pending RequestOps with associated external file links.
bool HasChangesPending ()
 Checks if there are any pending changes stored in the system.
async Task ClearChangesPending ()
 Clears all pending changes by deleting their stored files.
async Task UploadChangesPending (Action< string >? progressMessage=null, Action< int >? progressCount=null)
 Uploads all pending changes, processes them, and removes the changes once uploaded.
async Task ProcessAndRemovePendingChange (Tuple< string, RequestOp, IReadOnlyDictionary< string, string >?> change)
 Process a single change from GetChangesPending() and remove it from the ChangesPending store.
async Task RemoveChangePending (string main, IEnumerable< string >? externals)
 Removes a main pending change file along with its associated external files.
async Task Populate (IEnumerable< SuperModel > models, IEnumerable< string > associations, int? freshnessSeconds=null, int? fallbackFreshnessSeconds=null, bool skipIfSet=false, bool? hold=null, long? sequenceBeganMs=null)
 Populates one or more association properties on each of the given models using the association attribute definitions.
async Task Populate (SuperModel model, string association, int? freshnessSeconds=null, int? fallbackFreshnessSeconds=null, bool skipIfSet=false, bool? hold=null, long? sequenceBeganMs=null)
 Populates a specified association property on a given model based on its association attribute definition (BelongsTo/HasMany/HasOne).
async Task Populate (SuperModel model, IEnumerable< string > associations, int? freshnessSeconds=null, int? fallbackFreshnessSeconds=null, bool skipIfSet=false, bool? hold=null, long? sequenceBeganMs=null)
 Populates specified association properties on a given model with data based on association attribute definitions.
async Task Populate (IEnumerable< SuperModel > models, string association, int? freshnessSeconds=null, int? fallbackFreshnessSeconds=null, bool skipIfSet=false, bool? hold=null, long? sequenceBeganMs=null)
 Populates a specific association property on each of the provided models using its association attribute definition.
async Task< M?> Get< M > (int id, IEnumerable< string >? populate=null, int? freshnessSeconds=null, int? populateFreshnessSeconds=null, int? fallbackFreshnessSeconds=null, bool? hold=null, long? sequenceBeganMs=null, object? criteria=null)
 Retrieves data from cache or origin of model type M based on a numerical ID and returns the result or null.
async Task< M?> Get< M > (string id, IEnumerable< string >? populate=null, int? freshnessSeconds=null, int? populateFreshnessSeconds=null, int? fallbackFreshnessSeconds=null, bool? hold=null, long? sequenceBeganMs=null)
 Retrieves data from cache or origin of model type M based on a string ID and returns the result or null.
async Task< M?> Get< M > (long id, IEnumerable< string >? populate=null, int? freshnessSeconds=null, int? populateFreshnessSeconds=null, int? fallbackFreshnessSeconds=null, bool? hold=null, long? sequenceBeganMs=null)
 Retrieves data from cache or origin of model type M based on a long ID and returns the result or null.
Task< OpResponseGetResponse (Type modelType, object id, IEnumerable< string >? populate=null, int? freshnessSeconds=null, int? populateFreshnessSeconds=null, int? fallbackFreshnessSeconds=null, bool? hold=null, long? sequenceBeganMs=null, object? criteria=null)
 Retrieves a model instance of the given model type and ID with a full detail OpResponse object.
async Task< IEnumerable< OpResponse > > GetModelResponsesForIds (Type type, IEnumerable iids, int? freshnessSeconds=null, int? fallbackFreshnessSeconds=null, bool? hold=null, long? sequenceBeganMs=null)
 Retrieves models of the given type for a multitude of IDs.
async Task< IEnumerable< Model > > GetModelsForIds< Model > (IEnumerable iids, int? freshnessSeconds=null, int? fallbackFreshnessSeconds=null, bool? hold=null, long? sequenceBeganMs=null)
async Task< IEnumerable< object >?> GetCollection< M > (string collectionName, long? sequenceBeganMs=null, int? freshnessSeconds=null, int? fallbackFreshnessSeconds=null)
 Gets a collection literally, i.e., an enumerable of IDs.
Task< OpResponseGetCollectionResponse< M > (string collectionName, long? sequenceBeganMs=null, int? freshnessSeconds=null, int? fallbackFreshnessSeconds=null)
 Retrieves a collection as an enumerable of IDs with full detail as an OpResponse.
async Task< OpResponseGetWhereCollectionResponse< Model > (string propertyName, string propertyValue, int? freshnessSeconds=null, int? populateFreshnessSeconds=null, long? sequenceBeganMs=null)
 Used for populating HasMany or HasOne associations based on a foreign key.
async Task< IEnumerable< M > > GetWhereCollection< M > (string propertyName, string propertyValue, int? freshnessSeconds=null, int? populateFreshnessSeconds=null, long? sequenceBeganMs=null)
 Used for populating HasMany or HasOne associations based on a foreign key.
async Task< IEnumerable< M > > Query< M > (string? collectionKey, object? criteria=null, IEnumerable< string >? populate=null, int? freshnessSeconds=null, int? populateFreshnessSeconds=null, int? fallbackFreshnessSeconds=null, bool? hold=null, long? sequenceBeganMs=null, bool? localOnly=null)
 Performs a query on the origin with the given model and criteria, caching the resulting collection under collectionKey.
async Task< M?> QueryOne< M > (string? collectionKey, object criteria=null, IEnumerable< string >? populate=null, int? freshnessSeconds=null, int? populateFreshnessSeconds=null, int? fallbackFreshnessSeconds=null, bool? hold=null, long? sequenceBeganMs=null, bool? localOnly=null)
 Performs a query on the origin with the given model and criteria for a single record. Caches the result under the collectionKey.
Task< OpResponseQueryResponse< M > (string? collectionName, object? criteria, IEnumerable< string >? populate=null, int? freshnessSeconds=null, int? populateFreshnessSeconds=null, int? fallbackFreshnessSeconds=null, bool? hold=null, long? sequenceBeganMs=null, bool? localOnly=null)
 Performs a query on the origin with the given model and criteria, caching the resulting collection under collectionKey and returns a full detail OpResponse.
async Task< M > Create< M > (M model, bool hold=false)
 Create and return a model of the given type. An instance is used to pass in the values, and a newly created instance is returned from the origin. Note: the populate option will be removed from all write methods. Instead Create should be called followed by any call(s) to Populate() as required.
Task< OpResponseCreateResponse< M > (M model, bool hold=false)
 Create and return a model of the given type. An instance is used to pass in the values, and a newly created instance is returned from the origin. Note: the populate option will be removed from all write methods. Instead Create should be called followed by any call(s) to Populate() as required.
async Task< M > Replace< M > (M model)
 Replaces the given model with a new instance.
Task< OpResponseReplaceResponse< M > (M model)
 Generates a response for replacing the given model with a new instance.
async Task< M?> Update< M > (M model, IDictionary< string, object?> changes)
 Updates the given model with specified changes. Returns null if the record no longer exists.
Task< OpResponseUpdateResponse< M > (M model, IDictionary< string, object?> changes)
 Generates a response for updating the given model with specified changes.
async Task Destroy< M > (M model)
 Permanently removes the given model.
Task< OpResponseDestroyResponse< M > (M model)
 Generates a response for destroying the given model.
async Task< ReturnType?> Execute< ModelType, ReturnType > (string action, IDictionary< string, object?> parameters)
 Executes a specified action on a model type and returns a result of the specified return type.
Task< OpResponseExecuteResponse< ModelType, ReturnType > (string action, IDictionary< string, object?> parameters)
 Execute a specified action on a model type - returns a OpResponse.

Static Public Member Functions

static string EncodeBlobPath (string path)
 Encodes a blob path by replacing slashes with the alternative separator.
static string DecodeBlobPath (string path)
 Decodes an encoded blob path by reverting the alternative separator back to slashes.
static string HoldModelPath (string typeFolder, object? id=null)
 Constructs and returns a path for holding a model of the specified type in the hold directory.

Public Attributes

readonly CascadeConfig Config
readonly ICascadeOrigin Origin

Static Public Attributes

static ImmutableArray< Type > AssociationAttributes
const string BLOB_PATH_ALT_SEPARATOR = "_%_"

Protected Member Functions

async Task HasManyReplaceRemoveItem (SuperModel model, string property, SuperModel hasManyItem, bool remove=false, bool ensureItem=false)
 Utility method to either replace or remove an item from a HasMany association while optionally ensuring the item is present.
async Task< IReadOnlyList< object > > CollectionReplaceRemoveItem< Model > (string collectionName, object item, bool remove=false, bool ensureItem=false)
 Utility method to either replace or remove an item from a HasMany association while optionally ensuring the item is present.
virtual void OnPropertyChanged ([CallerMemberName] string? propertyName=null)
bool SetField< T > (ref T field, T value, [CallerMemberName] string? propertyName=null)
 Sets a field's value and triggers a property change notification if the value has changed.

Properties

long NowMs [get]
 Use this timestamp to keep in sync with the framework. Especially useful for testing as time can then be controlled by your origin implementation. Milliseconds since 1970.
bool ConnectionOnline [get, set]
 This property determines whether the framework acts in online (true) or offline (false) mode. It can be set to offline at any time, but should not be set to online unless the changes pending list is empty. ReconnectOnline() uploads changes and sets ConnectionOnline=true for you..
int PendingCount [get]
 Gets the count of pending changes when the connection is offline.

Events

PropertyChangedEventHandler PropertyChanged
 Used for watching properties on this (normally ConnectionOnline).

Detailed Description

Methods to manipulate properties and association relationships between models.

Provides methods used by applications for creating, updating, replacing, and deleting models, as well as executing actions.

Methods used by an application for reading (Get and Query).

Methods to populate properties of models with data based on their association attributes.

Methods for internal core data operations (Get/Query/Create/Update/Destroy) including processing relationships such as HasMany, HasOne, BelongsTo, and FromBlob on a data model. It interacts with various cache layers and origin layers to fulfill data requests and ensure data consistency.

Methods to serialize, deserialize, store, and manage pending operations for offline (ConnectionOnline == false).

Methods to manipulate and query metadata and holding.

The main class for all data requests and other operations. This would generally only be created once on startup of an application.

Functionality to manage cached collections and records, offering operations such as clearing, setting, and updating collections and individual records in the cascading caching system.

Functionality for retrieving, storing, and deleting binary blobs identified by a unique path.

Constructor & Destructor Documentation

◆ CascadeDataLayer()

Buzzware.Cascade.CascadeDataLayer.CascadeDataLayer ( ICascadeOrigin origin,
IEnumerable< ICascadeCache > cacheLayers,
CascadeConfig config,
ICascadePlatform cascadePlatform,
ErrorControl errorControl,
CascadeJsonSerialization serialization )
inline

CascadeDataLayer main constructor.

Parameters
originOrigin server
cacheLayersCache layers in order. Typically this would be an instance of a memory cache followed by a file based cache.
configconfiguration for cascade
cascadePlatformplatform specific implementation
errorControlinstance for managing exceptions
serializationinstance for serializing models

Member Function Documentation

◆ AddPendingChange()

async Task< string > Buzzware.Cascade.CascadeDataLayer.AddPendingChange ( RequestOp op)
inline

Adds a new pending RequestOp change to the system and saves it in a designated path.

Parameters
opThe RequestOp representing the change
Returns
string representing the file path where the operation was saved

◆ BlobClear()

async Task Buzzware.Cascade.CascadeDataLayer.BlobClear ( string blobPath)
inline

Removes a binary blob of the specified path from the cache (if exists) without affecting the origin.

Parameters
blobPathPath identifying the blob to be cleared from the cache

◆ BlobDestroy()

async Task Buzzware.Cascade.CascadeDataLayer.BlobDestroy ( string path)
inline

Removes a binary blob from the specified path, effectively deleting it.

Parameters
pathPath identifying the blob to be deleted

◆ BlobDestroyResponse()

Task< OpResponse > Buzzware.Cascade.CascadeDataLayer.BlobDestroyResponse ( string path)
inline

Generate an operation response for destroying a binary blob at the specified path.

Parameters
pathPath of the blob to be destroyed
Returns
Operation response for the destroy operation

◆ BlobDownload()

async Task Buzzware.Cascade.CascadeDataLayer.BlobDownload ( string path,
int? freshnessSeconds = null,
int? fallbackFreshnessSeconds = null,
bool? hold = null,
long? sequenceBeganMs = null )
inline

Download a binary blob identified by the given path to a local cache. Does not return the data. Use BlobGet/BlobGetStream to get the data.

Parameters
pathIdentifier for the blob
freshnessSecondsDesired freshness duration in seconds for the cache
fallbackFreshnessSecondsFallback freshness duration if primary freshness cannot be achieved
holdIndicates if the blob and its associations should be held in cache
sequenceBeganMsThe request timestamp in milliseconds since epoch, for caching optimization

◆ BlobExists()

async Task< bool > Buzzware.Cascade.CascadeDataLayer.BlobExists ( string path,
int? freshnessSeconds = null,
int? fallbackFreshnessSeconds = null,
bool? hold = null,
long? sequenceBeganMs = null )
inline

Test whether blob identified by the given path as an absolute file path exists, with optional caching and freshness parameters. For now this uses BlobGetFilePath which means it will download the file if it exists, but in future it should be optimised to only detect existence on the origin.

Parameters
pathIdentifier for the blob
freshnessSecondsDesired freshness duration in seconds for the cache
fallbackFreshnessSecondsFallback freshness duration if primary freshness cannot be achieved
holdIndicates if the blob and its associations should be held in cache
sequenceBeganMsThe request timestamp in milliseconds since epoch, for caching optimization
Returns
An absolute file path to the blob file, or null if not found

◆ BlobGet()

async Task< byte[]?> Buzzware.Cascade.CascadeDataLayer.BlobGet ( string path,
int? freshnessSeconds = null,
int? fallbackFreshnessSeconds = null,
bool? hold = null,
long? sequenceBeganMs = null )
inline

Retrieve a binary blob identified by the given path with optional caching and freshness parameters.

Parameters
pathIdentifier for the blob
freshnessSecondsDesired freshness duration in seconds for the cache
fallbackFreshnessSecondsFallback freshness duration if primary freshness cannot be achieved
holdIndicates if the blob and its associations should be held in cache
sequenceBeganMsThe request timestamp in milliseconds since epoch, for caching optimization
Returns
The blob data as a byte array or null if not found

◆ BlobGetArrivedAt()

async Task< long?> Buzzware.Cascade.CascadeDataLayer.BlobGetArrivedAt ( string path)
inline

Get the arrivedAt timestamp of a cached blob, from the nearest cache layer holding it. Never contacts the origin. Where the cache layer can give an absolute file path, this is just a file stat - no streams are opened and no RequestOp is processed.

Parameters
pathIdentifier for the blob
Returns
The arrivedAt time in milliseconds since 1970, or null if not present in any cache layer

◆ BlobGetFilePath()

async Task< string?> Buzzware.Cascade.CascadeDataLayer.BlobGetFilePath ( string path,
int? freshnessSeconds = null,
int? fallbackFreshnessSeconds = null,
bool? hold = null,
long? sequenceBeganMs = null )
inline

Retrieve a binary blob identified by the given path as an absolute file path, with optional caching and freshness parameters.

Parameters
pathIdentifier for the blob
freshnessSecondsDesired freshness duration in seconds for the cache
fallbackFreshnessSecondsFallback freshness duration if primary freshness cannot be achieved
holdIndicates if the blob and its associations should be held in cache
sequenceBeganMsThe request timestamp in milliseconds since epoch, for caching optimization
Returns
An absolute file path to the blob file, or null if not found

◆ BlobGetFilePathResponse()

Task< OpResponse > Buzzware.Cascade.CascadeDataLayer.BlobGetFilePathResponse ( string path,
int? freshnessSeconds = null,
int? fallbackFreshnessSeconds = null,
bool? hold = null,
long? sequenceBeganMs = null )
inline

Retrieves a response containing a binary blob from the data layer based on the specified path.

Parameters
pathPath of the blob to be retrieved
freshnessSecondsDesired freshness of the blob in seconds
fallbackFreshnessSecondsFallback freshness in case the primary cannot be achieved
holdFlag to hold the blob in cache for offline availability
sequenceBeganMsRequest timestamp in milliseconds since epoch
Returns
A task representing the operation, with OpResponse as the result

◆ BlobGetResponse()

Task< OpResponse > Buzzware.Cascade.CascadeDataLayer.BlobGetResponse ( string path,
int? freshnessSeconds = null,
int? fallbackFreshnessSeconds = null,
bool? hold = null,
long? sequenceBeganMs = null )
inline

Retrieves a response containing a binary blob from the data layer based on the specified path.

Parameters
pathPath of the blob to be retrieved
freshnessSecondsDesired freshness of the blob in seconds
fallbackFreshnessSecondsFallback freshness in case the primary cannot be achieved
holdFlag to hold the blob in cache for offline availability
sequenceBeganMsRequest timestamp in milliseconds since epoch
Returns
A task representing the operation, with OpResponse as the result

◆ BlobGetStream()

async Task< Stream?> Buzzware.Cascade.CascadeDataLayer.BlobGetStream ( string path,
int? freshnessSeconds = null,
int? fallbackFreshnessSeconds = null,
bool? hold = null,
long? sequenceBeganMs = null )
inline

Retrieve a binary blob identified by the given path as a Stream, with optional caching and freshness parameters.

Parameters
pathIdentifier for the blob
freshnessSecondsDesired freshness duration in seconds for the cache
fallbackFreshnessSecondsFallback freshness duration if primary freshness cannot be achieved
holdIndicates if the blob and its associations should be held in cache
sequenceBeganMsThe request timestamp in milliseconds since epoch, for caching optimization
Returns
The blob data as a Stream or null if not found

◆ BlobPut() [1/2]

async Task Buzzware.Cascade.CascadeDataLayer.BlobPut ( string path,
byte[] data )
inline

Store a binary blob at the specified path.

Parameters
pathPath where the blob will be stored
dataThe binary data to be stored

◆ BlobPut() [2/2]

async Task Buzzware.Cascade.CascadeDataLayer.BlobPut ( string path,
Stream stream )
inline

Store a binary blob stream at the specified path. One day this could be made more efficient for large blobs.

Parameters
pathPath where the blob will be stored
dataThe binary data to be stored

◆ BlobPutResponse() [1/2]

Task< OpResponse > Buzzware.Cascade.CascadeDataLayer.BlobPutResponse ( string path,
byte[] data )
inline

Store a binary blob at the specified path, returning the OpResponse.

Parameters
pathPath to store the blob data
dataBinary data to be stored
Returns
Operation response with details of the put operation

◆ BlobPutResponse() [2/2]

Task< OpResponse > Buzzware.Cascade.CascadeDataLayer.BlobPutResponse ( string path,
Stream stream )
inline

Store a binary blob at the specified path, returning the OpResponse.

Parameters
pathPath to store the blob stream
streamBinary stream to be stored
Returns
Operation response with details of the put operation

◆ ClearCollection< Model >()

async Task Buzzware.Cascade.CascadeDataLayer.ClearCollection< Model > ( string collectionName)
inline

Clear a collection from all cache layers for the specified collection type.

Parameters
collectionNameThe name of the collection to be cleared from the cache.
Template Parameters
ModelSpecifies the model type of the collection.

◆ ClearLayer()

async Task Buzzware.Cascade.CascadeDataLayer.ClearLayer ( int index,
bool exceptHeld = true )
inline

Clears all content from a specified cache layer, with the option to preserve held entries.

Parameters
indexThe index of the cache layer to be cleared.
exceptHeldIf true, entries marked as held will not be cleared.

◆ ClearLayers()

async Task Buzzware.Cascade.CascadeDataLayer.ClearLayers ( bool exceptHeld = true,
DateTime? olderThan = null )
inline

Clears all content from all cache layers, with options to preserve held entries and clear content based on age.

Parameters
exceptHeldIf true, entries marked as held will not be cleared.
olderThanOptional: clear only items older than this DateTime.

◆ CollectionAppend< Model >()

async Task< IEnumerable< object > > Buzzware.Cascade.CascadeDataLayer.CollectionAppend< Model > ( string collectionName,
object id )
inline

Add a single id to the end of a collection in all cache layers.

Parameters
collectionNameThe name of the collection to be updated.
idThe id to append to the collection.
Template Parameters
ModelSpecifies the model type of the collection.
Returns
The updated collection as an IEnumerable of objects.
Type Constraints
Model :class 

◆ CollectionEnsureItem< Model >()

Task< IReadOnlyList< object > > Buzzware.Cascade.CascadeDataLayer.CollectionEnsureItem< Model > ( string collectionName,
object item )
inline

Ensures that an item exists in the collection - by replacing or adding.

Parameters
collectionName
item
Type Constraints
Model :class 

◆ CollectionPrepend< Model >()

async Task< IEnumerable< object > > Buzzware.Cascade.CascadeDataLayer.CollectionPrepend< Model > ( string collectionName,
object id )
inline

Add a single id to the beginning of a collection in all cache layers.

Parameters
collectionNameThe name of the collection to be updated.
idThe id to prepend to the collection.
Template Parameters
ModelSpecifies the model type of the collection.
Returns
The updated collection as an IEnumerable of objects.
Type Constraints
Model :class 

◆ CollectionRemoveItem< Model >()

Task< IReadOnlyList< object > > Buzzware.Cascade.CascadeDataLayer.CollectionRemoveItem< Model > ( string collectionName,
object item )
inline

Removes an item from the collection if it exists.

Parameters
collectionName
item
Type Constraints
Model :class 

◆ CollectionReplaceItem< Model >()

Task< IReadOnlyList< object > > Buzzware.Cascade.CascadeDataLayer.CollectionReplaceItem< Model > ( string collectionName,
object item )
inline

Replaces an item in the collection only if it already exists.

Parameters
collectionName
item
Type Constraints
Model :class 

◆ CollectionReplaceRemoveItem< Model >()

async Task< IReadOnlyList< object > > Buzzware.Cascade.CascadeDataLayer.CollectionReplaceRemoveItem< Model > ( string collectionName,
object item,
bool remove = false,
bool ensureItem = false )
inlineprotected

Utility method to either replace or remove an item from a HasMany association while optionally ensuring the item is present.

Parameters
collectionNamethe name of the collection to modify
itemthe item - can be a string (eg. a collection name for a collection of collections) or number - doesn't have to be a valid id in the collection
removeSpecifies whether to remove the item from the association.
ensureItemIndicates if the item should be ensured in the association, avoiding duplicates.
Type Constraints
Model :class 

◆ Create< M >()

async Task< M > Buzzware.Cascade.CascadeDataLayer.Create< M > ( M model,
bool hold = false )
inline

Create and return a model of the given type. An instance is used to pass in the values, and a newly created instance is returned from the origin. Note: the populate option will be removed from all write methods. Instead Create should be called followed by any call(s) to Populate() as required.

Template Parameters
MThe type of the model to be created.
Parameters
modelThe model instance containing values to create a new entry from.
holdIndicates whether to hold the operation.
Returns
Model of type M

◆ CreateResponse< M >()

Task< OpResponse > Buzzware.Cascade.CascadeDataLayer.CreateResponse< M > ( M model,
bool hold = false )
inline

Create and return a model of the given type. An instance is used to pass in the values, and a newly created instance is returned from the origin. Note: the populate option will be removed from all write methods. Instead Create should be called followed by any call(s) to Populate() as required.

Template Parameters
MThe type of the model to be created.
Parameters
modelThe model instance containing values to create a new entry from.
holdIndicates whether to hold the operation.
Returns
OpResponse with full detail of operation, including Result of type M

◆ DecodeBlobPath()

string Buzzware.Cascade.CascadeDataLayer.DecodeBlobPath ( string path)
inlinestatic

Decodes an encoded blob path by reverting the alternative separator back to slashes.

Parameters
pathThe encoded blob path to decode.
Returns
The decoded blob path.

◆ DeserializeRequestOp()

RequestOp Buzzware.Cascade.CascadeDataLayer.DeserializeRequestOp ( string? s,
out IReadOnlyDictionary< string, string > externals )
inline

Deserializes a JSON string into a RequestOp object while extracting any external links.

Parameters
sThe serialized JSON string representation of the RequestOp
externalsDictionary of external file links found during deserialization
Returns
The deserialized RequestOp object

◆ Destroy< M >()

async Task Buzzware.Cascade.CascadeDataLayer.Destroy< M > ( M model)
inline

Permanently removes the given model.

Template Parameters
MThe type of the model to be destroyed.
Parameters
modelThe model instance to destroy.

◆ DestroyResponse< M >()

Task< OpResponse > Buzzware.Cascade.CascadeDataLayer.DestroyResponse< M > ( M model)
inline

Generates a response for destroying the given model.

Template Parameters
MThe type of the model to be destroyed.
Parameters
modelThe model instance to destroy.
Returns
OpResponse with operation details.

◆ EncodeBlobPath()

string Buzzware.Cascade.CascadeDataLayer.EncodeBlobPath ( string path)
inlinestatic

Encodes a blob path by replacing slashes with the alternative separator.

Parameters
pathThe blob path to encode.
Returns
The encoded blob path.

◆ EnsureAuthenticated()

async Task Buzzware.Cascade.CascadeDataLayer.EnsureAuthenticated ( Type? type = null)
inline

Ensures that the user is authenticated. If not, it will attempt to authenticate the user based on the provided type.

Parameters
typeThe type used for authentication, can be null.
Returns
true if the user is authenticated; otherwise, false.

◆ Execute< ModelType, ReturnType >()

async Task< ReturnType?> Buzzware.Cascade.CascadeDataLayer.Execute< ModelType, ReturnType > ( string action,
IDictionary< string, object?> parameters )
inline

Executes a specified action on a model type and returns a result of the specified return type.

Template Parameters
ModelTypeThe type of model on which the action is executed.
ReturnTypeThe type that will be returned after execution, could be the same or different from ModelType.
Parameters
actionThe action to execute.
parametersParameters required for executing the action.
Returns
Result of type ReturnType after executing the action.

◆ ExecuteResponse< ModelType, ReturnType >()

Task< OpResponse > Buzzware.Cascade.CascadeDataLayer.ExecuteResponse< ModelType, ReturnType > ( string action,
IDictionary< string, object?> parameters )
inline

Execute a specified action on a model type - returns a OpResponse.

Template Parameters
ModelTypeThe type of model on which the action is executed.
ReturnTypeThe type that will be returned after execution.
Parameters
actionThe action to execute.
parametersParameters required for executing the action.
Returns
OpResponse with operation details, including Result of type ReturnType.

◆ ExternalBinaryPathFromPendingChangePath()

string Buzzware.Cascade.CascadeDataLayer.ExternalBinaryPathFromPendingChangePath ( string filePath,
string externalPath )
inline

Converts a pending change file path to its corresponding binary file path.

Parameters
filePathThe path of the original file
externalPathThe name of the external segment to append
Returns
The reconstructed path to the binary file

◆ Get< M >() [1/3]

async Task< M?> Buzzware.Cascade.CascadeDataLayer.Get< M > ( int id,
IEnumerable< string >? populate = null,
int? freshnessSeconds = null,
int? populateFreshnessSeconds = null,
int? fallbackFreshnessSeconds = null,
bool? hold = null,
long? sequenceBeganMs = null,
object? criteria = null )
inline

Retrieves data from cache or origin of model type M based on a numerical ID and returns the result or null.

Parameters
idID of model to retrieve.
populateEnumerable association property names to set with data for convenience. Equivalent to multiple Get/Query requests.
freshnessSecondsFreshness duration for the main object.
populateFreshnessSecondsFreshness duration for any populated associations.
fallbackFreshnessSecondsFallback freshness requirement if the main requirement cannot be met. Defaults to FRESHNESS_ANY.
holdIndicates whether to mark the main object and populated associations to be held in cache.
sequenceBeganMs(Optional) Request time represented as milliseconds since 1970. Ideally, a group of requests will be given the same time to optimize caching.
Template Parameters
MModel type, which is a subclass of SuperModel.
Returns
Model of type M or null.
Type Constraints
M :class 

◆ Get< M >() [2/3]

async Task< M?> Buzzware.Cascade.CascadeDataLayer.Get< M > ( long id,
IEnumerable< string >? populate = null,
int? freshnessSeconds = null,
int? populateFreshnessSeconds = null,
int? fallbackFreshnessSeconds = null,
bool? hold = null,
long? sequenceBeganMs = null )
inline

Retrieves data from cache or origin of model type M based on a long ID and returns the result or null.

Parameters
idID of model to retrieve.
populateEnumerable association property names to set with data for convenience. Equivalent to multiple Get/Query requests.
freshnessSecondsFreshness duration for the main object.
populateFreshnessSecondsFreshness duration for any populated associations.
fallbackFreshnessSecondsFallback freshness requirement if the main requirement cannot be met. Defaults to FRESHNESS_ANY.
holdIndicates whether to mark the main object and populated associations to be held in cache.
sequenceBeganMs(Optional) Request time represented as milliseconds since 1970. Ideally, a group of requests will be given the same time to optimize caching.
Template Parameters
MModel type, which is a subclass of SuperModel.
Returns
Model of type M or null.
Type Constraints
M :class 

◆ Get< M >() [3/3]

async Task< M?> Buzzware.Cascade.CascadeDataLayer.Get< M > ( string id,
IEnumerable< string >? populate = null,
int? freshnessSeconds = null,
int? populateFreshnessSeconds = null,
int? fallbackFreshnessSeconds = null,
bool? hold = null,
long? sequenceBeganMs = null )
inline

Retrieves data from cache or origin of model type M based on a string ID and returns the result or null.

Parameters
idID of model to retrieve.
populateEnumerable association property names to set with data for convenience. Equivalent to multiple Get/Query requests.
freshnessSecondsFreshness duration for the main object.
populateFreshnessSecondsFreshness duration for any populated associations.
fallbackFreshnessSecondsFallback freshness requirement if the main requirement cannot be met. Defaults to FRESHNESS_ANY.
holdIndicates whether to mark the main object and populated associations to be held in cache.
sequenceBeganMs(Optional) Request time represented as milliseconds since 1970. Ideally, a group of requests will be given the same time to optimize caching.
Template Parameters
MModel type, which is a subclass of SuperModel.
Returns
Model of type M or null.
Type Constraints
M :class 

◆ GetArrivedAt< Model >()

async Task< long?> Buzzware.Cascade.CascadeDataLayer.GetArrivedAt< Model > ( object id)
inline

Get the arrivedAt timestamp of a cached record, from the nearest cache layer holding it.

Parameters
idThe unique identifier of the model.
Template Parameters
ModelSpecifies the model type of the record.
Returns
The arrivedAt time in milliseconds since 1970, or -1 if not present in any cache layer.
Type Constraints
Model :class 

◆ GetChangesPending()

async Task< List< Tuple< string, RequestOp, IReadOnlyDictionary< string, string >?> > > Buzzware.Cascade.CascadeDataLayer.GetChangesPending ( )
inline

Retrieves and reconstructs a list of pending RequestOps with associated external file links.

Returns
A list of tuples containing the filename, RequestOp, and associated externals

◆ GetChangesPendingList()

IEnumerable< string > Buzzware.Cascade.CascadeDataLayer.GetChangesPendingList ( )
inline

Retrieves a list of pending change filenames from the configured directory.

Returns
An enumerable of pending change filenames

◆ GetCollection< M >()

async Task< IEnumerable< object >?> Buzzware.Cascade.CascadeDataLayer.GetCollection< M > ( string collectionName,
long? sequenceBeganMs = null,
int? freshnessSeconds = null,
int? fallbackFreshnessSeconds = null )
inline

Gets a collection literally, i.e., an enumerable of IDs.

Parameters
collectionNameUser-defined name for the collection.
sequenceBeganMs
freshnessSeconds
fallbackFreshnessSeconds
Template Parameters
MThe type of the collection.
Returns
An enumerable of IDs.
Type Constraints
M :class 

◆ GetCollectionArrivedAt< Model >()

async Task< long?> Buzzware.Cascade.CascadeDataLayer.GetCollectionArrivedAt< Model > ( string name)
inline

Get the arrivedAt timestamp of a cached collection, from the nearest cache layer holding it.

Parameters
nameThe name of the collection.
Template Parameters
ModelSpecifies the model type of the collection.
Returns
The arrivedAt time in milliseconds since 1970, or -1 if not present in any cache layer.
Type Constraints
Model :class 

◆ GetCollectionResponse< M >()

Task< OpResponse > Buzzware.Cascade.CascadeDataLayer.GetCollectionResponse< M > ( string collectionName,
long? sequenceBeganMs = null,
int? freshnessSeconds = null,
int? fallbackFreshnessSeconds = null )
inline

Retrieves a collection as an enumerable of IDs with full detail as an OpResponse.

Parameters
collectionNameUser-defined name for the collection.
sequenceBeganMs(Optional) Request time represented as milliseconds since 1970.
freshnessSeconds
fallbackFreshnessSeconds
Template Parameters
MThe type of the collection.
Returns
OpResponse with Results as an enumerable of IDs.

◆ GetModelResponsesForIds()

async Task< IEnumerable< OpResponse > > Buzzware.Cascade.CascadeDataLayer.GetModelResponsesForIds ( Type type,
IEnumerable iids,
int? freshnessSeconds = null,
int? fallbackFreshnessSeconds = null,
bool? hold = null,
long? sequenceBeganMs = null )
inline

Retrieves models of the given type for a multitude of IDs.

Parameters
typeThe type of models to retrieve.
iidsAn enumerable list of IDs for which models are to be retrieved.
freshnessSecondsFreshness duration for the retrieved objects.
fallbackFreshnessSecondsFallback freshness requirement.
holdIndicates whether to mark the retrieved objects to be held in cache.
sequenceBeganMs(Optional) Request time represented as milliseconds since 1970.
Returns
An enumerable of OpResponse containing the retrieved models.

◆ GetResponse()

Task< OpResponse > Buzzware.Cascade.CascadeDataLayer.GetResponse ( Type modelType,
object id,
IEnumerable< string >? populate = null,
int? freshnessSeconds = null,
int? populateFreshnessSeconds = null,
int? fallbackFreshnessSeconds = null,
bool? hold = null,
long? sequenceBeganMs = null,
object? criteria = null )
inline

Retrieves a model instance of the given model type and ID with a full detail OpResponse object.

Parameters
modelType
idID of model to retrieve.
populateEnumerable association property names to set with data for convenience.
freshnessSecondsFreshness duration for the main object.
populateFreshnessSecondsFreshness duration for any populated associations.
fallbackFreshnessSecondsFallback freshness requirement if the main requirement cannot be met. Defaults to FRESHNESS_ANY.
holdIndicates whether to mark the main object and populated associations to be held in cache.
sequenceBeganMs(Optional) Request time represented as milliseconds since 1970.
criteria
Returns
OpResponse containing the response details.

◆ GetWhereCollection< M >()

async Task< IEnumerable< M > > Buzzware.Cascade.CascadeDataLayer.GetWhereCollection< M > ( string propertyName,
string propertyValue,
int? freshnessSeconds = null,
int? populateFreshnessSeconds = null,
long? sequenceBeganMs = null )
inline

Used for populating HasMany or HasOne associations based on a foreign key.

Parameters
propertyNameName of the foreign key.
propertyValueValue of the foreign key.
freshnessSecondsFreshness duration for the main object.
populateFreshnessSecondsFreshness duration for any populated associations.
sequenceBeganMs(Optional) Request time represented as milliseconds since 1970.
Template Parameters
ModelThe type of the collection.
Returns
Enumerable of models of type M.
Type Constraints
M :class 

◆ GetWhereCollectionResponse< Model >()

async Task< OpResponse > Buzzware.Cascade.CascadeDataLayer.GetWhereCollectionResponse< Model > ( string propertyName,
string propertyValue,
int? freshnessSeconds = null,
int? populateFreshnessSeconds = null,
long? sequenceBeganMs = null )
inline

Used for populating HasMany or HasOne associations based on a foreign key.

Parameters
propertyNameName of the foreign key.
propertyValueValue of the foreign key.
freshnessSecondsFreshness duration for the main object.
populateFreshnessSecondsFreshness duration for any populated associations.
sequenceBeganMs(Optional) Request time represented as milliseconds since 1970.
Template Parameters
ModelThe type of the collection.
Returns
OpResponse containing the response details.

◆ HasChangesPending()

bool Buzzware.Cascade.CascadeDataLayer.HasChangesPending ( )
inline

Checks if there are any pending changes stored in the system.

Returns
bool indicating the existence of pending changes

◆ HasCollectionExpired< Model >()

async Task< bool > Buzzware.Cascade.CascadeDataLayer.HasCollectionExpired< Model > ( string name,
int? fallbackSeconds = null )
inline
Type Constraints
Model :class 

◆ HasExpired< Model >()

async Task< bool > Buzzware.Cascade.CascadeDataLayer.HasExpired< Model > ( object id,
int? fallbackSeconds = null )
inline
Type Constraints
Model :class 

◆ HasManyAddItem()

async Task Buzzware.Cascade.CascadeDataLayer.HasManyAddItem ( SuperModel model,
string property,
SuperModel hasManyItem )
inline

Adds an item to the HasMany association of a model, updating both the property and the caches.

Parameters
modelThe main model to be updated.
propertyThe name of the HasMany property on the model.
hasManyItemThe item to add to the association.
Exceptions
ArgumentExceptionThrown if the property is not a HasMany property.

◆ HasManyEnsureItem()

async Task Buzzware.Cascade.CascadeDataLayer.HasManyEnsureItem ( SuperModel model,
string property,
SuperModel hasManyItem )
inline

Ensures that an item occurs in the association property and cached collection, matching by id (adds or replaces as necessary to avoid duplicates).

Parameters
modelThe model to update.
propertyThe name of the association property.
hasManyItemThe item to ensure in the association.

◆ HasManyRemoveItem()

async Task Buzzware.Cascade.CascadeDataLayer.HasManyRemoveItem ( SuperModel model,
string property,
SuperModel hasManyItem )
inline

Removes an item from the association property and cached collection, matching by id.

Parameters
modelThe model from which the item is being removed.
propertyThe name of the association property.
hasManyItemThe item to remove from the association.

◆ HasManyReplace()

async Task Buzzware.Cascade.CascadeDataLayer.HasManyReplace ( SuperModel model,
string property,
IEnumerable< object > models )
inline

Replaces the value of the given HasMany property with the given IEnumerable of models and updates the caches appropriately. This is needed eg. when you add models to a HasMany association.

Parameters
modelThe model for which the property is being replaced.
propertyThe name of the HasMany property on the model.
modelsThe new models to set for the association.
Exceptions
ArgumentException

◆ HasManyReplaceItem()

async Task Buzzware.Cascade.CascadeDataLayer.HasManyReplaceItem ( SuperModel model,
string property,
SuperModel hasManyItem )
inline

Replaces an item in the association property and cached collection, matching by id.

Parameters
modelThe model in which the item is being replaced.
propertyThe name of the association property.
hasManyItemThe new item for the association.

◆ HasManyReplaceRemoveItem()

async Task Buzzware.Cascade.CascadeDataLayer.HasManyReplaceRemoveItem ( SuperModel model,
string property,
SuperModel hasManyItem,
bool remove = false,
bool ensureItem = false )
inlineprotected

Utility method to either replace or remove an item from a HasMany association while optionally ensuring the item is present.

Parameters
modelThe main model to be updated.
propertyThe name of the HasMany property on the model.
hasManyItemThe item to be removed, replaced, or ensured in the association.
removeSpecifies whether to remove the item from the association.
ensureItemIndicates if the item should be ensured in the association, avoiding duplicates.

◆ Hold() [1/2]

void Buzzware.Cascade.CascadeDataLayer.Hold ( object model)
inline

Holds an object model by its type and identifier value.

Parameters
modelThe model instance to hold.

◆ Hold() [2/2]

void Buzzware.Cascade.CascadeDataLayer.Hold ( Type modelType,
object id )
inline

Holds a model of a specified type and identifier by creating a metadata entry.

Parameters
modelTypeThe Type of the model to hold.
idThe identifier of the model to hold.

◆ Hold< Model >()

void Buzzware.Cascade.CascadeDataLayer.Hold< Model > ( object id)
inline

Holds a model of the specified type and identifier by creating a corresponding metadata entry.

Template Parameters
ModelThe model type to hold.
Parameters
idThe identifier of the model to hold.

◆ HoldBlob()

void Buzzware.Cascade.CascadeDataLayer.HoldBlob ( string path)
inline

Holds a blob path by creating a corresponding metadata entry.

Parameters
pathThe blob path to hold.

◆ HoldCollection()

void Buzzware.Cascade.CascadeDataLayer.HoldCollection ( Type modelType,
string name )
inline

Holds a named collection for a specified model type by creating a metadata entry.

Parameters
modelTypeThe Type of the model collection to hold.
nameThe name of the collection to hold.

◆ HoldCollection< Model >()

void Buzzware.Cascade.CascadeDataLayer.HoldCollection< Model > ( string name)
inline

Holds a named collection for a model type by creating a corresponding metadata entry.

Template Parameters
ModelThe model type for the collection to hold.
Parameters
nameThe name of the collection to hold.

◆ HoldModelPath()

string Buzzware.Cascade.CascadeDataLayer.HoldModelPath ( string typeFolder,
object? id = null )
inlinestatic

Constructs and returns a path for holding a model of the specified type in the hold directory.

Parameters
typeFolderThe folder type associated with the model.
idOptional ID of the model, used to construct sub-paths.
Returns
The generated hold model path.

◆ IsCollectionHeld< Model >()

bool Buzzware.Cascade.CascadeDataLayer.IsCollectionHeld< Model > ( string name)
inline

Checks if a named collection for a model type is currently held.

Template Parameters
ModelThe model type of the collection to check.
Parameters
nameThe name of the collection to check.
Returns
True if the collection is held, false otherwise.

◆ IsHeld< Model >()

bool Buzzware.Cascade.CascadeDataLayer.IsHeld< Model > ( object id)
inline

Checks if a model of the specified type and identifier is currently held.

Template Parameters
ModelThe model type to check.
Parameters
idThe identifier of the model to check.
Returns
True if the model is held, otherwise False.

◆ IsHeldBlob()

bool Buzzware.Cascade.CascadeDataLayer.IsHeldBlob ( string path)
inline

Checks if a blob path is currently held in the metadata.

Parameters
pathThe blob path to check.
Returns
True if the blob path is held, otherwise False.

◆ ListHeldBlobPaths()

IEnumerable< object > Buzzware.Cascade.CascadeDataLayer.ListHeldBlobPaths ( )
inline

Lists all blob paths currently held in metadata.

Returns
An enumerable of held blob paths.

◆ ListHeldCollections()

IEnumerable< object > Buzzware.Cascade.CascadeDataLayer.ListHeldCollections ( Type modelType)
inline

Lists all named collections of a specified model type that are currently held.

Parameters
modelTypeThe Type of the model collections to list.
Returns
An enumerable of all names of held collections.

◆ ListHeldIds()

IEnumerable< object > Buzzware.Cascade.CascadeDataLayer.ListHeldIds ( Type type)
inline

Lists all identifiers of the specified type currently held in metadata. Differentiates between blob and non-blob types.

Parameters
typeThe Type to list held identifiers for.
Returns
An enumerable of held identifiers.

◆ ListHeldIds< Model >()

IEnumerable< object > Buzzware.Cascade.CascadeDataLayer.ListHeldIds< Model > ( )
inline

Lists all identifiers of a specified model type that are currently held.

Template Parameters
ModelThe model type whose held identifiers are to be listed.
Returns
An enumerable of all held identifiers for the specified model type.

◆ ListModelTypes()

IEnumerable< Type > Buzzware.Cascade.CascadeDataLayer.ListModelTypes ( )
inline

Obtains a list of model types that the Origin can handle.

Returns
An enumerable list of model types.

◆ MetaClearPath()

void Buzzware.Cascade.CascadeDataLayer.MetaClearPath ( string path,
DateTime? olderThan = null,
bool recursive = false )
inline

Clears files from the specified metadata path based on optional filter criteria. Can remove files older than a specified date and can operate recursively.

Parameters
pathThe path to clear the files or folders.
olderThanThe optional DateTime to check if files are older to be deleted.
recursiveWhether to delete files recursively.

◆ MetaExists()

bool Buzzware.Cascade.CascadeDataLayer.MetaExists ( string path)
inline

Checks whether a key exists in the metadata store for the given path.

Parameters
pathThe relative key path to check for existence.
Returns
True if the key exists, false otherwise.

◆ MetaGet()

string? Buzzware.Cascade.CascadeDataLayer.MetaGet ( string path)
inline

Retrieves the value associated with the specified key path in the metadata store. Returns null if the key does not exist.

Parameters
pathThe relative path (key) to retrieve the value for.
Returns
The value associated with the key, or null if the key does not exist.

◆ MetaList()

IEnumerable< string > Buzzware.Cascade.CascadeDataLayer.MetaList ( string path,
bool recursive = false,
bool sort = true )
inline

Lists all keys under the specified path in the metadata store. Options to list recursively and sort the results.

Parameters
pathThe relative path to list keys from.
recursiveWhether to list recursively through all subdirectories.
sortWhether to sort the resulting list of keys.
Returns
An enumerable of all keys under the specified path.

◆ MetaResolvePath()

string Buzzware.Cascade.CascadeDataLayer.MetaResolvePath ( string path)
inline

Resolves and returns the absolute path for the given relative meta path. Ensures that the path does not contain any directory traversal sequences ('..').

Parameters
pathThe relative path that needs resolution.
Returns
The resolved absolute path.

◆ MetaSet()

void Buzzware.Cascade.CascadeDataLayer.MetaSet ( string path,
string? value )
inline

Sets a value in the metadata store for the specified key path. If the value is null, the key is removed from the store.

Parameters
pathThe relative path (key) in the metadata store.
valueThe value to associate with the key. Null to remove the key.

◆ Populate() [1/4]

async Task Buzzware.Cascade.CascadeDataLayer.Populate ( IEnumerable< SuperModel > models,
IEnumerable< string > associations,
int? freshnessSeconds = null,
int? fallbackFreshnessSeconds = null,
bool skipIfSet = false,
bool? hold = null,
long? sequenceBeganMs = null )
inline

Populates one or more association properties on each of the given models using the association attribute definitions.

Parameters
modelsA collection of models to act upon
associationsA list of associations to populate for each model
freshnessSecondsSpecifies how fresh the data should be by setting the freshness in seconds
fallbackFreshnessSecondsFallback freshness setting, used if the main requirement cannot be fulfilled. Defaults to FRESHNESS_ANY.
sequenceBeganMsOptional request time (milliseconds since 1970) for optimizing caching when multiple requests share the same time
skipIfSetIf set to true, skips any associations where the property is already filled
holdSpecifies whether to maintain the acquired data after the method completes
Returns
A Task that resolves when the operation is complete for all models and associations

◆ Populate() [2/4]

async Task Buzzware.Cascade.CascadeDataLayer.Populate ( IEnumerable< SuperModel > models,
string association,
int? freshnessSeconds = null,
int? fallbackFreshnessSeconds = null,
bool skipIfSet = false,
bool? hold = null,
long? sequenceBeganMs = null )
inline

Populates a specific association property on each of the provided models using its association attribute definition.

Parameters
modelsThe collection of models to be populated
propertyThe property name that each model should populate based on its association attribute definition
associationThe association to populate for each given model
freshnessSecondsThe maximum age in seconds for the data to be considered fresh
fallbackFreshnessSecondsDefines a fallback freshness if the main constraint cannot be met. Defaults to FRESHNESS_ANY.
skipIfSetSkip the operation for properties that have already been set, improving performance
holdDetermines if the data will persist after execution
sequenceBeganMsAn optional time in milliseconds since 1970 to be applied to optimize caching for grouped requests
Returns
A Task that resolves when the operation is complete across all models and associations specified

◆ Populate() [3/4]

async Task Buzzware.Cascade.CascadeDataLayer.Populate ( SuperModel model,
IEnumerable< string > associations,
int? freshnessSeconds = null,
int? fallbackFreshnessSeconds = null,
bool skipIfSet = false,
bool? hold = null,
long? sequenceBeganMs = null )
inline

Populates specified association properties on a given model with data based on association attribute definitions.

Parameters
modelThe model to which the association properties will be applied
associationsList of associations to populate
freshnessSecondsDefines how fresh the data should be, measured in seconds
fallbackFreshnessSecondsFallback freshness requirement if the main requirement cannot be met. Defaults to FRESHNESS_ANY.
skipIfSetIf true, skips all associations for which the properties are already set
holdDetermines whether to hold the data during the operation
sequenceBeganMsOptional request time (milliseconds since 1970) for optimizing caching
Returns
A Task that resolves when the operation has completed

◆ Populate() [4/4]

async Task Buzzware.Cascade.CascadeDataLayer.Populate ( SuperModel model,
string association,
int? freshnessSeconds = null,
int? fallbackFreshnessSeconds = null,
bool skipIfSet = false,
bool? hold = null,
long? sequenceBeganMs = null )
inline

Populates a specified association property on a given model based on its association attribute definition (BelongsTo/HasMany/HasOne).

Parameters
modelThe model to apply the association on
associationThe property name on the model that is to be populated
freshnessSecondsDefines how fresh the data should be, measured in seconds
fallbackFreshnessSecondsFallback freshness requirement if the main requirement cannot be met. Defaults to FRESHNESS_ANY.
skipIfSetIf true and the property is already set, the operation will be skipped for performance reasons
holdDetermines whether to hold the data or not during the operation
sequenceBeganMsOptional request time (milliseconds since 1970) used for optimizing caching when a group of requests share the same time
Returns
A Task that resolves when the operation has completed

◆ ProcessAndRemovePendingChange()

async Task Buzzware.Cascade.CascadeDataLayer.ProcessAndRemovePendingChange ( Tuple< string, RequestOp, IReadOnlyDictionary< string, string >?> change)
inline

Process a single change from GetChangesPending() and remove it from the ChangesPending store.

Parameters
change

◆ Query< M >()

async Task< IEnumerable< M > > Buzzware.Cascade.CascadeDataLayer.Query< M > ( string? collectionKey,
object? criteria = null,
IEnumerable< string >? populate = null,
int? freshnessSeconds = null,
int? populateFreshnessSeconds = null,
int? fallbackFreshnessSeconds = null,
bool? hold = null,
long? sequenceBeganMs = null,
bool? localOnly = null )
inline

Performs a query on the origin with the given model and criteria, caching the resulting collection under collectionKey.

Parameters
collectionKeyKey under which the collection will be cached.
criteriaFiltering criteria for the query.
populateAssociation names to populate with data.
freshnessSecondsFreshness duration for main objects.
populateFreshnessSecondsFreshness duration for populated associations.
fallbackFreshnessSecondsFallback freshness requirement if main requirement is not met.
holdWhether to hold objects in cache.
sequenceBeganMs(Optional) Request time as milliseconds since 1970 for optimized caching.
localOnly
Template Parameters
MModel type to query.
Returns
IEnumerable<M> containing the query results.

◆ QueryOne< M >()

async Task< M?> Buzzware.Cascade.CascadeDataLayer.QueryOne< M > ( string? collectionKey,
object criteria = null,
IEnumerable< string >? populate = null,
int? freshnessSeconds = null,
int? populateFreshnessSeconds = null,
int? fallbackFreshnessSeconds = null,
bool? hold = null,
long? sequenceBeganMs = null,
bool? localOnly = null )
inline

Performs a query on the origin with the given model and criteria for a single record. Caches the result under the collectionKey.

Parameters
collectionKeyKey under which collection will be cached.
criteriaFiltering criteria for the query.
populateAssociation names to populate with data.
freshnessSecondsFreshness duration for main objects.
populateFreshnessSecondsFreshness duration for populated associations.
fallbackFreshnessSecondsFallback freshness requirement if main requirement is not met.
holdWhether to hold objects in cache.
sequenceBeganMs(Optional) Request time as milliseconds since 1970 for optimized caching.
localOnly
Template Parameters
MModel type to query.
Returns
Single model of type M if found, otherwise null.

◆ QueryResponse< M >()

Task< OpResponse > Buzzware.Cascade.CascadeDataLayer.QueryResponse< M > ( string? collectionName,
object? criteria,
IEnumerable< string >? populate = null,
int? freshnessSeconds = null,
int? populateFreshnessSeconds = null,
int? fallbackFreshnessSeconds = null,
bool? hold = null,
long? sequenceBeganMs = null,
bool? localOnly = null )
inline

Performs a query on the origin with the given model and criteria, caching the resulting collection under collectionKey and returns a full detail OpResponse.

Parameters
collectionName
criteriaFiltering criteria for the query.
populateAssociation names to populate with data.
freshnessSecondsFreshness duration for main objects.
populateFreshnessSecondsFreshness duration for populated associations.
fallbackFreshnessSecondsFallback freshness requirement if main requirement is not met.
holdWhether to hold objects in cache.
sequenceBeganMs(Optional) Request time as milliseconds since 1970 for optimized caching.
localOnly
collectionKeyKey under which collection will be cached.
Template Parameters
MModel type to query.
Returns
OpResponse with query details.

◆ RaisePropertyChanged()

void Buzzware.Cascade.CascadeDataLayer.RaisePropertyChanged ( [CallerMemberName] string propertyName = null)
inline

Raises this object's PropertyChanged event.

Parameters
propertyNameName of the property used to notify listeners. This value is optional and can be provided automatically when invoked from compilers that support CallerMemberNameAttribute.

◆ RemoveChangePending()

async Task Buzzware.Cascade.CascadeDataLayer.RemoveChangePending ( string main,
IEnumerable< string >? externals )
inline

Removes a main pending change file along with its associated external files.

Parameters
mainThe main file to remove
externalsAn enumeration of associated external files to remove

◆ Replace< M >()

async Task< M > Buzzware.Cascade.CascadeDataLayer.Replace< M > ( M model)
inline

Replaces the given model with a new instance.

Template Parameters
MThe type of the model to be replaced.
Parameters
modelThe model instance to replace.
Returns
Model of type M after replacement.

◆ ReplaceResponse< M >()

Task< OpResponse > Buzzware.Cascade.CascadeDataLayer.ReplaceResponse< M > ( M model)
inline

Generates a response for replacing the given model with a new instance.

Template Parameters
MThe type of the model to be replaced.
Parameters
modelThe model instance to replace.
Returns
OpResponse with operation details, including Result of type M.

◆ SerializeRequestOp()

JsonNode Buzzware.Cascade.CascadeDataLayer.SerializeRequestOp ( RequestOp op,
out IReadOnlyDictionary< string, byte[]> externalContent )
inline

Serializes a RequestOp object into a JsonNode while also extracting and returning any external content.

Parameters
opThe RequestOp object to serialize
externalContentDictionary containing the external content if any (key: filename suffix, value: content)
Returns
A JsonNode representing the serialized RequestOp

◆ SetAssociation() [1/2]

async Task Buzzware.Cascade.CascadeDataLayer.SetAssociation ( IEnumerable targets,
string propertyName,
object value )
inline

Use this when you only want to set an association property to a value you already have. Consider using UpdateHasMany/UpdateHasOne/UpdateBelongsTo instead. This method does not update the caches.

Parameters
targetsThe models to act on.
propertyNameThe name of the association property to set.
valueThe value to set for the association property.

◆ SetAssociation() [2/2]

Task Buzzware.Cascade.CascadeDataLayer.SetAssociation ( object target,
string propertyName,
object value )
inline

Use this when you only want to set an association property to a value you already have. Consider using UpdateHasMany/UpdateHasOne/UpdateBelongsTo instead. This method does not update the caches.

Parameters
targetThe model to act on.
propertyNameThe name of the association property to set.
valueThe value to set for the association property.

◆ SetCacheRecord()

async Task Buzzware.Cascade.CascadeDataLayer.SetCacheRecord ( object id,
object model,
long? timeMs = null )
inline

Replace a single cached model with a new version in all caches.

Parameters
idThe unique identifier of the model to be replaced.
modelThe new model object to store in the cache.
timeMsOptional: specific time in milliseconds since 1970 for the caching record's timestamp.

◆ SetCacheWhereCollection()

async Task Buzzware.Cascade.CascadeDataLayer.SetCacheWhereCollection ( Type modelType,
string propertyName,
string propertyValue,
IEnumerable< object > collection )
inline

Replaces the cached values for HasMany/HasOne type associations (not typically used) Updates all cache layers with the provided association collection.

Parameters
modelTypeThe type of model for which the association cache is being replaced.
propertyNameThe foreign key property name that defines the association.
propertyValueThe foreign key property value that defines the association.
collectionAn enumerable of ids representing the new association values.

◆ SetCollection< Model >()

async Task< IEnumerable< object > > Buzzware.Cascade.CascadeDataLayer.SetCollection< Model > ( string collectionName,
IEnumerable< object > ids )
inline

Replace a collection with a specified set of ids in all cache layers.

Parameters
collectionNameThe name of the collection to be updated.
idsAn enumerable list of ids representing the new collection content.
Template Parameters
ModelSpecifies the model type of the collection.
Returns
The new set of ids as an IEnumerable of objects.
Type Constraints
Model :class 

◆ SetField< T >()

bool Buzzware.Cascade.CascadeDataLayer.SetField< T > ( ref T field,
T value,
[CallerMemberName] string? propertyName = null )
inlineprotected

Sets a field's value and triggers a property change notification if the value has changed.

Template Parameters
TType of the field value.
Parameters
fieldThe reference to the backing field.
valueThe new value to set.
propertyNameThe name of the property (automatically provided).
Returns
true if the value has changed, false otherwise.

◆ SetFromBlobProperty()

async Task< object?> Buzzware.Cascade.CascadeDataLayer.SetFromBlobProperty ( SuperModel model,
string property,
byte[] blob )
inline

Sets the property of the given model from a binary blob using the specified property's conversion attribute.

Parameters
modelThe model instance where the property will be set
propertyName of the property to set
blobBinary data to be converted and assigned to the property
Returns
The converted property value

◆ SetModelCollectionProperty()

async Task Buzzware.Cascade.CascadeDataLayer.SetModelCollectionProperty ( object target,
CascadePropertyInfo propertyInfo,
object value )
inline

Sets a collection property on a model. It ensures the property is enumerable and makes necessary type conversions.

Parameters
targetThe model on which the property is being set.
propertyInfoThe metadata of the property to set.
valueThe value to set for the property. Must be an IEnumerable.
Exceptions
ArgumentExceptionThrown when the property type or value types are incorrect.

◆ Unhold< Model >()

void Buzzware.Cascade.CascadeDataLayer.Unhold< Model > ( object id)
inline

Unholds a model of the specified type and identifier by removing the metadata entry.

Template Parameters
ModelThe model type to unhold.
Parameters
idThe identifier of the model to unhold.

◆ UnholdAll() [1/2]

void Buzzware.Cascade.CascadeDataLayer.UnholdAll ( DateTime? olderThan)
inline

Unholds all models and collections, clearing all associated metadata. Can target only metadata entries older than a specified date.

Parameters
olderThanOptional DateTime to filter which holds should be cleared.

◆ UnholdAll() [2/2]

void Buzzware.Cascade.CascadeDataLayer.UnholdAll ( Type modelType,
DateTime? olderThan = null )
inline

Unholds all instances and collections of the specified model type. Optionally filter out entries older than a specified date.

Parameters
modelTypeThe Type of the model to clear holds for.
olderThanOptional DateTime to filter which holds should be cleared.

◆ UnholdBlob()

void Buzzware.Cascade.CascadeDataLayer.UnholdBlob ( string path)
inline

Unholds a blob path by removing the corresponding metadata entry.

Parameters
pathThe blob path to unhold.

◆ UnholdCollection< Model >()

void Buzzware.Cascade.CascadeDataLayer.UnholdCollection< Model > ( string name)
inline

Unholds a named collection for a model type by removing the corresponding metadata entry.

Template Parameters
ModelThe model type of the collection to unhold.
Parameters
nameThe name of the collection to unhold.

◆ Update< M >()

async Task< M?> Buzzware.Cascade.CascadeDataLayer.Update< M > ( M model,
IDictionary< string, object?> changes )
inline

Updates the given model with specified changes. Returns null if the record no longer exists.

Template Parameters
MThe type of the model to be updated.
Parameters
modelThe model instance to update.
changesDictionary containing changes to apply to the model.
Returns
An updated model of type M or null if not found.
Type Constraints
M :class 

◆ UpdateHasOne()

async Task Buzzware.Cascade.CascadeDataLayer.UpdateHasOne ( SuperModel model,
string property,
object value )
inline

Replaces the value of the given HasOne property with the given model.

Parameters
modelThe main model to update.
propertyThe name of the HasOne property on the main model.
valueThe new model for the association.
Exceptions
ArgumentExceptionThrown if the property is not a HasOne property.

◆ UpdateResponse< M >()

Task< OpResponse > Buzzware.Cascade.CascadeDataLayer.UpdateResponse< M > ( M model,
IDictionary< string, object?> changes )
inline

Generates a response for updating the given model with specified changes.

Template Parameters
MThe type of the model to be updated.
Parameters
modelThe model instance to update.
changesDictionary containing changes to apply to the model.
Returns
OpResponse with operation details, including Result of type M.

◆ UploadChangesPending()

async Task Buzzware.Cascade.CascadeDataLayer.UploadChangesPending ( Action< string >? progressMessage = null,
Action< int >? progressCount = null )
inline

Uploads all pending changes, processes them, and removes the changes once uploaded.

Parameters
progressMessageOptional action to report progress messages
progressCountOptional action to report remaining count of pending changes

Member Data Documentation

◆ AssociationAttributes

ImmutableArray<Type> Buzzware.Cascade.CascadeDataLayer.AssociationAttributes
static
Initial value:
= ImmutableArray.Create<Type>(
)
Attribute to denote that a property is a reference to another record (of specified id) of another typ...
Definition BelongsToAttribute.cs:11
Represents an attribute that specifies a one-to-many relationship. Used to mark a property intended t...
Definition HasManyAttribute.cs:12
This attribute class is used within the Cascade library to indicate a 'has-one' relationship between ...
Definition HasOneAttribute.cs:12

The documentation for this class was generated from the following files:
  • Buzzware.Cascade/CascadeDataLayer.Associations.cs
  • Buzzware.Cascade/CascadeDataLayer.Main.cs
  • Buzzware.Cascade/CascadeDataLayer.Meta.cs
  • Buzzware.Cascade/CascadeDataLayer.Offline.cs
  • Buzzware.Cascade/CascadeDataLayer.Blobs.cs
  • Buzzware.Cascade/CascadeDataLayer.Caching.cs
  • Buzzware.Cascade/CascadeDataLayer.Operations.cs
  • Buzzware.Cascade/CascadeDataLayer.Populate.cs
  • Buzzware.Cascade/CascadeDataLayer.ReadRequests.cs
  • Buzzware.Cascade/CascadeDataLayer.WriteRequests.cs