SoloTable.CodeGen
0.1.0-preview.1
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
<PackageReference Include="SoloTable.CodeGen" Version="0.1.0-preview.1" />
<PackageVersion Include="SoloTable.CodeGen" Version="0.1.0-preview.1" />
<PackageReference Include="SoloTable.CodeGen" />
paket add SoloTable.CodeGen --version 0.1.0-preview.1
#r "nuget: SoloTable.CodeGen, 0.1.0-preview.1"
#:package SoloTable.CodeGen@0.1.0-preview.1
#addin nuget:?package=SoloTable.CodeGen&version=0.1.0-preview.1&prerelease
#tool nuget:?package=SoloTable.CodeGen&version=0.1.0-preview.1&prerelease
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 COLUMNand 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.0net9.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 | 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. 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. |
-
net8.0
- SoloTable.Abstractions (>= 0.1.0-preview.1)
- SoloTable.Core (>= 0.1.0-preview.1)
-
net9.0
- SoloTable.Abstractions (>= 0.1.0-preview.1)
- SoloTable.Core (>= 0.1.0-preview.1)
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 |