SoloTable.CodeGen 0.1.0-preview.1

This is a prerelease version of SoloTable.CodeGen.
There is a newer prerelease version of this package available.
See the version list below for details.
dotnet add package SoloTable.CodeGen --version 0.1.0-preview.1
                    
NuGet\Install-Package SoloTable.CodeGen -Version 0.1.0-preview.1
                    
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="SoloTable.CodeGen" Version="0.1.0-preview.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="SoloTable.CodeGen" Version="0.1.0-preview.1" />
                    
Directory.Packages.props
<PackageReference Include="SoloTable.CodeGen" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add SoloTable.CodeGen --version 0.1.0-preview.1
                    
#r "nuget: SoloTable.CodeGen, 0.1.0-preview.1"
                    
#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.
#:package SoloTable.CodeGen@0.1.0-preview.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=SoloTable.CodeGen&version=0.1.0-preview.1&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=SoloTable.CodeGen&version=0.1.0-preview.1&prerelease
                    
Install as a Cake Tool

SoloTable

Schema sync and scaffold for .NET 8 and .NET 9 — code-first one table at a time, DB-first single or multi-table (including EF Core models).

Install one provider package, connect with its facade, then either:

Approach Direction API
Code-first C# model → database db.CodeFirst()...
DB-first Database → C# / metadata db.DbFirst()...

Current release: 0.1.0-preview — suitable for evaluation and early adoption. APIs may still change before 1.0.

Author: Pankaj Jadhav · GitHub · License: MIT


Install

Pick only the database you use:

dotnet add package SoloTable.Sqlite
dotnet add package SoloTable.MySql        # MySQL + MariaDB
dotnet add package SoloTable.PostgreSql
dotnet add package SoloTable.SqlServer
dotnet add package SoloTable.Oracle
dotnet add package SoloTable.Firebird

Preview packages require a matching version (or --prerelease):

dotnet add package SoloTable.MySql --version 0.1.0-preview.1
Package Facade
SoloTable.Sqlite SqliteFacade.Connect(cs)
SoloTable.MySql MySqlFacade.Connect(cs)
SoloTable.PostgreSql PostgreSqlFacade.Connect(cs)
SoloTable.SqlServer SqlServerFacade.Connect(cs)
SoloTable.Oracle OracleFacade.Connect(cs)
SoloTable.Firebird FirebirdFacade.Connect(cs)

Connection strings

SQLite:      Data Source=app.db
MySQL:       Server=localhost;Port=3306;Database=mydb;Uid=root;Pwd=secret;
PostgreSQL:  Host=localhost;Port=5432;Database=mydb;Username=postgres;Password=secret
SQL Server:  Server=localhost;Database=mydb;Trusted_Connection=True;TrustServerCertificate=True
Oracle:      User Id=scott;Password=tiger;Data Source=localhost:1521/XEPDB1
Firebird:    Database=app.fdb;User=SYSDBA;Password=masterkey;DataSource=localhost

Code-first (C# → database)

Create or alter one table from a CLR type or a fluent definition.

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using SoloTable;
using SoloTable.MySql; // or Sqlite / PostgreSql / SqlServer / ...

[Table("Orders")]
public class Order
{
    [Key]
    public long Id { get; set; }

    [Required, MaxLength(100)]
    public string CustomerName { get; set; } = "";
}

var db = MySqlFacade.Connect(
    "Server=localhost;Port=3306;Database=mydb;Uid=root;Pwd=secret;");

// From entity type
await db.CodeFirst().Entity<Order>().SyncAsync();

// One-shot helper
await db.CodeFirst().EnsureAsync<Order>();

// Fluent definition (no entity class required)
await db.CodeFirst()
    .Table("Orders")
    .Define(t => t
        .Column("Id", ColumnDbType.Int64, c => c.PrimaryKey(identity: true))
        .Column("CustomerName", ColumnDbType.String, c => c.NotNull().MaxLength(100))
        .Column("Notes", ColumnDbType.String, c => c.Nullable()))
    .SyncAsync();

// Dry-run: generate SQL without executing
var sql = await db.CodeFirst().Entity<Order>().GenerateScriptAsync();

Adding a property on Order and calling SyncAsync() again only alters that table (additive by default).


DB-first (database → C#)

Single table (POCO)

Inspect or scaffold a partial POCO from one existing table. Writing one file never deletes others.

var db = MySqlFacade.Connect(connectionString);

var live = await db.DbFirst().Table("Orders").InspectAsync();

var scaffold = await db.DbFirst()
    .Table("Orders")
    .Scaffold()
    .WithNamespace("MyApp.Models")
    .WithDataAnnotations()
    .GenerateAsync();

Console.WriteLine(scaffold.SourceCode);

await db.DbFirst()
    .Table("Orders")
    .GenerateToFileAsync("Orders.cs");

db.Scaffold("Orders") is a shorthand for db.DbFirst().Table("Orders").Scaffold().

EF Core model (partial entities + DbContext + Fluent API)

Generated code targets EF Core. Add Microsoft.EntityFrameworkCore and your EF database provider in the consuming app.

Multi-table — entities + DbContext / OnModelCreating:

await db.DbFirst()
    .Tables("Customers", "Orders")   // or .Schema() for all tables
    .ScaffoldEf()
    .WithNamespace("MyApp.Data")
    .WithContextName("AppDbContext")
    .WithDataAnnotations()
    .GenerateToDirectoryAsync("./Generated");

Single-table EF scaffold is additive — updates only that entity file; does not overwrite or delete other entities or an existing DbContext:

await db.DbFirst()
    .Table("Orders")
    .ScaffoldEf()          // GenerateContext = false by default
    .WithNamespace("MyApp.Data")
    .GenerateToDirectoryAsync("./Generated");

// Opt in if you really want a one-table DbContext written:
await db.DbFirst().Table("Orders").ScaffoldEf().WithContext().GenerateToDirectoryAsync("./Generated");

GenerateToDirectoryAsync only writes files produced by the current run; it never clears the folder.

Consumers still need EF packages, for example:

dotnet add package Microsoft.EntityFrameworkCore
dotnet add package Pomelo.EntityFrameworkCore.MySql   # or Npgsql / SqlServer / ...

Round-trip

await db.CodeFirst().EnsureAsync<Order>();
await db.DbFirst().Table("Orders").GenerateToFileAsync("Generated/Order.cs");

Safety defaults

SoloTable code-first targets only the named table:

  • Never emits DROP TABLE
  • Never mutates other tables
  • DROP COLUMN and other destructive changes are skipped unless you opt in:
await db.CodeFirst()
    .Entity<Order>()
    .WithOptions(o => o.AllowDestructive = true)
    .SyncAsync();

Dry-run / script generation never executes DDL:

.WithOptions(o => o.DryRun = true)
// or
.GenerateScriptAsync()

More detail: Safety policy on GitHub


Target frameworks

  • net8.0
  • net9.0

Design notes

  • Facade pattern — engines and dialects stay internal.
  • Release builds — assemblies are obfuscated; symbol packages are not published.
  • Install one provider per app; do not install every SoloTable.* package unless you need multiple databases.
  • Code-first remains one table per sync call; DB-first can scaffold one or many tables into EF models.

Docs: NuGet setup · Providers · Testing · Protection · Publish

Product 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.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (6)

Showing the top 5 NuGet packages that depend on SoloTable.CodeGen:

Package Downloads
SoloTable.Firebird

Firebird provider for SoloTable — single-table schema sync and additive scaffold.

SoloTable.PostgreSql

PostgreSQL provider for SoloTable — single-table schema sync and additive scaffold.

SoloTable.Sqlite

SQLite provider for SoloTable — single-table schema sync and additive scaffold.

SoloTable.MySql

MySQL and MariaDB provider for SoloTable — single-table schema sync and additive scaffold.

SoloTable.Oracle

Oracle provider for SoloTable — single-table schema sync and additive scaffold.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.1.0-preview.3 101 7/22/2026
0.1.0-preview.2 90 7/22/2026
0.1.0-preview.1 98 7/22/2026