LiteDB.Async 0.1.8

dotnet add package LiteDB.Async --version 0.1.8                
NuGet\Install-Package LiteDB.Async -Version 0.1.8                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="LiteDB.Async" Version="0.1.8" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add LiteDB.Async --version 0.1.8                
#r "nuget: LiteDB.Async, 0.1.8"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install LiteDB.Async as a Cake Addin
#addin nuget:?package=LiteDB.Async&version=0.1.8

// Install LiteDB.Async as a Cake Tool
#tool nuget:?package=LiteDB.Async&version=0.1.8                

litedb-async

This library allows the use of asynchronous programming techniques with the LiteDb library. It is intended for Xamarin and WPF applications that require or would benefit a lightweight NoSQL database but also don't want to open and manage lots of threads or block the UI while database operations are occuring.

We manage the thread for you.

Available on nuget. https://www.nuget.org/packages/LiteDB.Async/

How to use

Installation

Include the nuget package in your project in the usual way

Install-Package LiteDB.Async

or

dotnet add package LiteDB.Async

Collections

Open a LiteDbAsync instance by calling the constructor in the standard way.

var db = new LiteDatabaseAsync("Filename=mydatabase.db;Connection=shared;Password=hunter2");

Collections are the equivalent of tables

var collection = _db.GetCollection<SimplePerson>();

This will give us an instance of the collection we can read and write.

We can upsert just like in the regular LiteDb

var collection = _db.GetCollection<SimplePerson>();
            var person = new SimplePerson()
            {
                Id = Guid.NewGuid(),
                FirstName = "John",
                LastName = "Smith"
            };

            var upsertResult = await collection.UpsertAsync(person);

Queries

When we want to read from the database we should use a query.

To read all SimplePerson's in the database

var collection = _db.GetCollection<SimplePerson>();
var listResult = await collection.Query().ToListAsync();

You can use Linq

var theSmiths = await collection.Query().Where(x => x.Lastname == "Smith").ToListAsync();

Transactions

Use the BeginTransaction method to start a transaction

using var asyncDb1 = new LiteDatabaseAsync(connectionString);
using var asyncDb2 = await asyncDb1.BeginTransactionAsync();

Operations run on asyncDb2 are now isolated from asyncDb1. They can also be rolled back, or if your program exits without call CommitAsync they are lost.

From version 5.0.16 of LiteDb we started to have problems with transactions on Shared connections. Therefore will be recommending Direct connections from LiteDb.Async version 0.1.6 goind forward.

To commit

await asyncDb2.CommitAsync();

Supported API

Almost all functions from LiteDb have an async replacement

From Collections

Query, CountAsync, LongCountAsync, ExistsAsync, MinAsync, MaxAsync, DeleteAsync, DeleteManyAsync, FindAsync, FindByIdAsync, FindOneAsync, FindAllAsync, Include, EnsureIndexAsync, InsertAsync, UpdateAsync, UpdateManyAsync, UpsertAsync

From Query

Include, Where, OrderBy, OrderByDescending, GroupBy, Select, Limit, Skip, Offset, ForUpdate, ToDocumentsAsync, ToEnumerableAsync, ToListAsync, ToArrayAsync, FirstAsync, FirstOrDefaultAsync, SingleAsync, SingleOrDefaultAsync, CountAsync, LongCountAsync, ExistsAsync

From Database

UtcDate, CheckpointSize, UserVersion, Timeout, Collation, LimitSize, BeginTransAsync, CommitAsync, RollbackAsync, PragmaAsync, GetCollectionNamesAsync, CollectionExistsAsync, DropCollectionAsync, RenameCollectionAsync, CheckpointAsync, RebuildAsync

From Storage

How does it work?

The constructor LiteDatabaseAsync opens and wraps a LiteDB instant. It also starts a background thread which all actions are performed in.

When a function that causes an evaluation is called it sends a message to the background thread, where the required action is performed by the LiteDb instance. The result is then return to the calling thread when the function in the background completes. If the function in the background thread causes an exception it is caught and a LiteAsyncException is raised. The original exception is preserved as the InnerException.

Each class or interface in the LiteDb library has an equivalent in the LiteDb.Async library. Each function that returns a task is named with the async suffix. You can then call LiteDb.ASync methods using similar syntax to calling async functions in EF Core.

How do transactions work?

A new database object is created and connects to the same source, the new database object also creates a new background worker thread for itself. It then calls the underlying LiteDb.BeginTrans function to use LiteDb's transaction functionality.

Building

To build the solution

dotnet build

To run the unit tests

dotnet test

To run a single specific unit test

dotnet test --filter DisplayName=LiteDB.Async.Test.SimpleDatabaseTest.TestCanUpsertAndGetList

To build for nuget dotnet pack --configuration Release

Don't forget to bump the version number in the litedbasync.csproj project file

It will build a nupkg file.

Next log in to nuget.org and upload the nupkg file which was just built.

Done the package will be available to the world within a few minutes.

Command line package build instructions

https://docs.microsoft.com/en-us/nuget/quickstart/create-and-publish-a-package-using-the-dotnet-cli

Web Upload instructions

https://docs.microsoft.com/en-us/nuget/nuget-org/publish-a-package

VS Code config

When checking out for the first time copy the .vscode/launch.json.default and .vscode/tasks.json.default to .vscode/launch.json and .vscode/tasks.json.

Example usage

The repo https://github.com/mlockett42/mvvm-cross-litedb-async gives an example of how to use this library in Xamarin Forms and MVVM.

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • .NETStandard 2.0

NuGet packages (13)

Showing the top 5 NuGet packages that depend on LiteDB.Async:

Package Downloads
Fluxera.Repository.LiteDB

A LiteDB repository implementation.

LiteDB.Queryable

An IQueryable wrapper implementation for LiteDB with additional async extensions.

LiteDB.Identity.Async

Uses the LiteDB.Identity and combines it with LiteDB.async

Serilog.Sinks.LiteDb.Async

Serilog event sink that writes to LiteDb database

Modern.Repositories.LiteDB.Async

A generic repository implementation using LiteDb Async for CRUD and Query operations

GitHub repositories (2)

Showing the top 2 popular GitHub repositories that depend on LiteDB.Async:

Repository Stars
LykosAI/StabilityMatrix
Multi-Platform Package Manager for Stable Diffusion
mlockett42/litedb-async
This library allows the use of asynchronous programming techniques with the LiteDb library
Version Downloads Last updated
0.1.8 9,329 6/26/2024
0.1.7 34,911 8/5/2023
0.1.6 10,552 3/17/2023
0.1.5 21,613 1/21/2023
0.1.4 941 1/16/2023
0.1.3 1,014 1/10/2023
0.1.2 4,956 12/20/2022
0.1.1 27,348 8/18/2022
0.1.0 19,869 3/19/2022
0.0.11 30,315 9/7/2021
0.0.10 1,671 8/22/2021
0.0.9 1,851 7/24/2021
0.0.8 4,749 1/13/2021
0.0.7 1,645 10/28/2020
0.0.6 941 10/23/2020
0.0.5 796 10/14/2020
0.0.4 1,298 9/26/2020
0.0.3 784 9/24/2020
0.0.2 1,009 5/24/2020
0.0.1 944 5/23/2020