Siaqodb is a NoSQL embedded object and document database engine that currently runs on .NET, MonoMac, Universal Windows Platform (UWP), Xamarin.iOS, Xamarin.Android, Xamarin.Mac and Unity3D. Siaqodb client side database may be synchronized with a Cloud/Server side database using our Sync Framework provider.
ObjectDB and DocumentDB – objects of an object graph may be stored individually or as a single unit called document.
fully ASYNC API
ACID transactions – uses a powerful storage engine: LMDB
small footprint, no extra dependencies
built-in or plug-able encryption support
SiaqodbManager – managed stored data, run ad-hoc LINQ queries
full LINQ provider
full POCO support
Portable Class Library support
partial object loading and eager loading
may store full object graphs, Arrays, Lists, Dictionaries, etc.
thread safe – full support for ASP.NET based apps
Add a Reference to Siaqodb DLLs
Right click on the References folder in Visual Studio's Solution Explorer and select Add Reference.... Navigate to the folder where the DLLs were installed, choose from /bin folder the platform you are using and add DLLs from respective folder (example for .NET 4.5 platform):
We have implemented a LINQ provider for Siaqodb. LINQ is the default and the only (public for client code) query engine available. What does the LINQ provider really mean for Siaqodb and why is it important to know how it works for Siaqodb?
In general a LINQ provider translates LINQ queries into specific API calls against a data source. It enables you to write LINQ queries in C#, and have those queries executed based on the native language of the data source. LINQ for Siaqodb translate a lambda expression passed in to an internal query and based on that query, data is pulled from the database and provided to the client code. There are two main techniques to implement a LINQ provider:
Implementing the IQueryable interface
By re-defining IEnumerable LINQ extension methods for a custom interface that inherits from IEnumerable
This query gets transformed into an internal Where object. The engine looks up if Age is an indexed field, if so, it takes all the OIDs for the key with value 30, it builds the objects associated to these OIDs, hydrates them and returns them to the caller. If the Age field is not indexed, the query is still optimized by fetching ONLY the Age field for each object in order to determine which objects have an age of 30. Only matching objects are created, hydrated and returned to the caller.