BitBadger.Documents.Sqlite
4.0.0
dotnet add package BitBadger.Documents.Sqlite --version 4.0.0
NuGet\Install-Package BitBadger.Documents.Sqlite -Version 4.0.0
<PackageReference Include="BitBadger.Documents.Sqlite" Version="4.0.0" />
paket add BitBadger.Documents.Sqlite --version 4.0.0
#r "nuget: BitBadger.Documents.Sqlite, 4.0.0"
// Install BitBadger.Documents.Sqlite as a Cake Addin #addin nuget:?package=BitBadger.Documents.Sqlite&version=4.0.0 // Install BitBadger.Documents.Sqlite as a Cake Tool #tool nuget:?package=BitBadger.Documents.Sqlite&version=4.0.0
BitBadger.Documents.Sqlite
This package provides a lightweight document library backed by SQLite. It also provides streamlined functions for traditional ADO.NET functionality where relational data is required. Both C# and F# have first-class implementations.
Features
- Select, insert, update, save (upsert), delete, count, and check existence of documents, and create tables and indexes for these documents
- Automatically generate IDs for documents (numeric IDs, GUIDs, or random strings)
- Address documents via ID or via comparison on any field
- Access documents as your domain models (<abbr title="Plain Old CLR Objects">POCO</abbr>s)
- Use
Task
-based async for all data access functions - Use building blocks for more complex queries
Upgrading from v3
There is a breaking API change for ByField
(C#) / byField
(F#), along with a compatibility namespace that can mitigate the impact of these changes. See the migration guide for full details.
Getting Started
Once the package is installed, the library needs a connection string. Once it has been obtained / constructed, provide it to the library:
// C#
using BitBadger.Documents.Sqlite;
//...
Sqlite.Configuration.UseConnectionString("connection-string");
// A new, open connection to the database can be obtained via
// Sqlite.Configuration.DbConn()
// F#
open BitBadger.Documents.Sqlite
// ...
Configuration.useConnectionString "connection-string"
// A new, open connection to the database can be obtained via
// Configuration.dbConn ()
By default, the library uses a System.Text.Json
-based serializer configured to use the FSharp.SystemTextJson
converter. To provide a different serializer (different options, more converters, etc.), construct it to implement IDocumentSerializer
and provide it via Configuration.useSerializer
. If custom serialization makes the serialized Id field not be Id
, that will also need to be configured.
Using
Retrieve all customers:
// C#; parameter is table name
// Find.All type signature is Func<string, Task<List<TDoc>>>
var customers = await Find.All<Customer>("customer");
// F#
// Find.all type signature is string -> Task<'TDoc list>
let! customers = Find.all<Customer> "customer"
Select a customer by ID:
// C#; parameters are table name and ID
// Find.ById type signature is Func<string, TKey, Task<TDoc?>>
var customer = await Find.ById<string, Customer>("customer", "123");
// F#
// Find.byId type signature is string -> 'TKey -> Task<'TDoc option>
let! customer = Find.byId<string, Customer> "customer" "123"
(keys are treated as strings in the database)
Count customers in Atlanta:
// C#; parameters are table name, field, operator, and value
// Count.ByFields type signature is Func<string, FieldMatch, IEnumerable<Field>, Task<long>>
var customerCount = await Count.ByFields("customer", FieldMatch.Any, [Field.Equal("City", "Atlanta")]);
// F#
// Count.byFields type signature is string -> FieldMatch -> Field seq -> Task<int64>
let! customerCount = Count.byFields "customer" Any [ Field.Equal "City" "Atlanta" ]
Delete customers in Chicago: (no offense, Second City; just an example...)
// C#; parameters are same as above, except return is void
// Delete.ByFields type signature is Func<string, FieldMatch, IEnumerable<Field>, Task>
await Delete.ByFields("customer", FieldMatch.Any, [Field.Equal("City", "Chicago")]);
// F#
// Delete.byFields type signature is string -> FieldMatch -> Field seq -> Task<unit>
do! Delete.byFields "customer" Any [ Field.Equal "City" "Chicago" ]
More Information
The project site has full details on how to use this library.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net8.0 is compatible. 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. net9.0 is compatible. |
-
net8.0
- BitBadger.Documents.Common (>= 4.0.0)
- FSharp.Core (>= 9.0.100)
- Microsoft.Data.Sqlite (>= 9.0.0)
-
net9.0
- BitBadger.Documents.Common (>= 4.0.0)
- FSharp.Core (>= 9.0.100)
- Microsoft.Data.Sqlite (>= 9.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
4.0.0 | 29 | 12/18/2024 |
4.0.0-rc5 | 93 | 9/18/2024 |
4.0.0-rc4 | 104 | 9/17/2024 |
4.0.0-rc3 | 124 | 8/23/2024 |
4.0.0-rc2 | 115 | 8/22/2024 |
4.0.0-rc1 | 106 | 8/19/2024 |
3.1.0 | 119 | 6/6/2024 |
3.0.0 | 141 | 4/21/2024 |
3.0.0-rc-2 | 226 | 1/24/2024 |
3.0.0-rc-1 | 145 | 12/31/2023 |
From v3.1: (see project site for breaking changes and compatibility)
- Change ByField to ByFields
- Support dot-access to nested document fields
- Add Find*Ordered functions/methods
- Add case-insensitive ordering (as of rc2)
- Preserve additional ORDER BY qualifiers (as of rc3)
- Add In / InArray comparisons (as of rc4)
- Field construction functions are generic (as of rc5)