Requirements
WitDatabase targets .NET 10 and nothing older. There is no .NET 9 build, no .NET 8 build, and no .NET Framework build. The reasoning behind that, along with the history of how the target moved, is in the introduction.
There is nothing else to install. WitDatabase is managed code with no native components, so there are no platform-specific binaries to deploy alongside it and nothing to configure on the machine it runs on. For what that means on each platform, see platform support.
Which package you need
WitDatabase gives you four ways to talk to a database, and you install the one that matches how you want to write your code. Each package brings in the ones below it, so you only ever install one.
| Package | You get | Install it when |
|---|---|---|
OutWit.Database.EntityFramework |
A full EF Core provider: DbContext, LINQ, migrations, scaffolding |
You are building an application and want an ORM. This is the common answer |
OutWit.Database.AdoNet |
DbConnection, DbCommand, DbDataReader, DbTransaction |
You want to write SQL yourself, or you have existing ADO.NET code to move across |
OutWit.Database |
WitSqlEngine: SQL without the ADO.NET wrapper |
You want SQL with less ceremony, or you need the engine's own APIs for schema introspection |
OutWit.Database.Core |
The key-value store, transactions, encryption, storage engines | You are building a cache, a document store, or something else that has no use for SQL |
If you are unsure, take OutWit.Database.EntityFramework. It contains everything, and dropping down
to ADO.NET or the SQL engine later costs you nothing because they are already there.
Installing
Using the .NET CLI:
dotnet add package OutWit.Database.EntityFrameworkUsing the Package Manager Console in Visual Studio:
Install-Package OutWit.Database.EntityFrameworkOr by editing your project file:
<ItemGroup>
<PackageReference Include="OutWit.Database.EntityFramework" />
</ItemGroup>None of these pin a version. Let the tooling write the current one into your project file.
Extension packages
Two of the seven published packages are extensions rather than layers. Neither is required, and neither sits between you and the core.
OutWit.Database.Core.IndexedDb
puts the database in the browser, backed by IndexedDB. Install
it alongside your chosen package when you are targeting Blazor WebAssembly.
dotnet add package OutWit.Database.Core.IndexedDbOutWit.Database.Core.BouncyCastle
adds ChaCha20-Poly1305 encryption. Reach for it where AES
has no hardware acceleration to fall back on, which in practice means WebAssembly and some ARM
targets.
dotnet add package OutWit.Database.Core.BouncyCastleIndexedDb is one implementation of IStorage and BouncyCastle is one implementation of
ICryptoProvider. Both are written through the same public interfaces you have, and both live
outside the core. Blazor WebAssembly support is a storage backend registered under a key, sitting
where the file backend usually sits. Putting the database in S3, or the keys in an HSM, is the same
amount of work. See architecture for how registration works.
Checking that it worked
A database in memory needs no file, no path and no cleanup, so it is the shortest way to prove the packages resolved:
using OutWit.Database.AdoNet;
using var connection = new WitDbConnection("Data Source=:memory:");
connection.Open();
using var command = connection.CreateCommand();
command.CommandText = "CREATE TABLE Ping (Id INT PRIMARY KEY, Note TEXT)";
command.ExecuteNonQuery();
command.CommandText = "INSERT INTO Ping (Id, Note) VALUES (1, 'ok') RETURNING Note";
Console.WriteLine(command.ExecuteScalar());If that prints ok, the parser, the planner, the storage engine and the provider are all in
place.
Where to go next
- First database, storing and reading real data
- Choosing an API, a longer look at the four entry points
- Connection strings, every parameter the engine accepts