SchemaSaurus.SqlServer
1.0.0
dotnet add package SchemaSaurus.SqlServer --version 1.0.0
NuGet\Install-Package SchemaSaurus.SqlServer -Version 1.0.0
<PackageReference Include="SchemaSaurus.SqlServer" Version="1.0.0" />
<PackageVersion Include="SchemaSaurus.SqlServer" Version="1.0.0" />
<PackageReference Include="SchemaSaurus.SqlServer" />
paket add SchemaSaurus.SqlServer --version 1.0.0
#r "nuget: SchemaSaurus.SqlServer, 1.0.0"
#:package SchemaSaurus.SqlServer@1.0.0
#addin nuget:?package=SchemaSaurus.SqlServer&version=1.0.0
#tool nuget:?package=SchemaSaurus.SqlServer&version=1.0.0
SchemaSaurus
SchemaSaurus is a .NET library for capturing a complete, immutable snapshot of a relational database's structural metadata — tables, views, indexes, foreign keys, stored procedures, functions, sequences, and user-defined types — into a single, JSON-serializable object graph.
It is designed for tools that need a stable, provider-agnostic view of a database schema: code generators, ORM tooling, migration diffing, documentation generation, and schema visualization.
| Package | Version |
|---|---|
| SchemaSaurus.Metadata | |
| SchemaSaurus.SqlServer | |
| SchemaSaurus.PostgreSql | |
| SchemaSaurus.MySql | |
| SchemaSaurus.Oracle | |
| SchemaSaurus.Sqlite |
Features
- Immutable, JSON round-trippable model rooted at
DatabaseModelwith structural equality. - Provider-agnostic abstraction via
IDatabaseSchemaReader— a single API across every supported engine. - Rich metadata coverage — tables, columns, primary keys, unique constraints, check constraints, indexes, foreign keys, views, stored procedures, scalar and table-valued functions, sequences, user-defined types, and triggers.
- Filtering by schema, table, and object kind through
SchemaReaderOptions. - Visitor pattern (
DatabaseVisitor) for walking the model in code generators and analyzers. - Annotations on every metadata element for engine-specific extensions (collation, identity, extended properties, etc.).
- Multi-target —
netstandard2.0,net462,net8.0,net9.0, andnet10.0.
Supported Providers
| Package | Minimum Supported Server |
|---|---|
SchemaSaurus.SqlServer |
SQL Server 2016 (13.x) or later, Azure SQL Database, Azure SQL Managed Instance |
SchemaSaurus.PostgreSql |
PostgreSQL 12 or later |
SchemaSaurus.MySql |
MySQL 5.7 or later, MariaDB 10.2 or later |
SchemaSaurus.Oracle |
Oracle Database 12c (12.1) or later |
SchemaSaurus.Sqlite |
SQLite 3.31.0 or later |
All providers depend on the shared SchemaSaurus.Metadata package, which defines the model and abstractions.
Installation
Install the metadata package plus the provider for your target engine:
dotnet add package SchemaSaurus.Metadata
dotnet add package SchemaSaurus.SqlServer
Quick Start
using SchemaSaurus.Metadata;
using SchemaSaurus.Metadata.Provider;
using SchemaSaurus.SqlServer;
IDatabaseSchemaReader reader = new SqlServerSchemaReader();
DatabaseModel model = await reader.ReadAsync("Server=.;Database=AdventureWorks;Integrated Security=true;TrustServerCertificate=true");
Console.WriteLine($"{model.DatabaseName} ({model.Provider} {model.ServerVersion})");
Console.WriteLine($"Tables: {model.Tables.Count}, Views: {model.Views.Count}");
Filtering
var options = new SchemaReaderOptions
{
Schemas = ["dbo", "Sales"],
IncludeStoredProcedures = false,
IncludeScalarFunctions = false,
};
var model = await reader.ReadAsync(connectionString, options);
JSON Serialization
The model uses source-generated System.Text.Json serialization via MetadataJsonContext for AOT-friendly, allocation-light round-tripping.
using System.Text.Json;
using SchemaSaurus.Metadata;
string json = JsonSerializer.Serialize(model, MetadataJsonContext.Default.DatabaseModel);
DatabaseModel restored = JsonSerializer.Deserialize(json, MetadataJsonContext.Default.DatabaseModel)!;
Visitor
Walk the model to drive code generation or analysis:
public sealed class TableLogger : DatabaseVisitor
{
protected override void VisitTable(Table table)
{
Console.WriteLine($"{table.Name} ({table.Columns.Count} columns)");
base.VisitTable(table);
}
}
new TableLogger().VisitDatabase(model);
Model Overview
DatabaseModel is a flat container — every object carries its own SchemaQualifiedName, so consumers can group or filter by schema without traversing a hierarchy.
Tables→Columns,PrimaryKey,UniqueConstraints,CheckConstraints,Indexes,ForeignKeys,TriggersViews→Columns,DefinitionStoredProcedures/ScalarFunctions/TableValuedFunctions→Parameters,ReturnColumns,DefinitionSequences,UserDefinedTypes
Every metadata element implements IAnnotatable for engine-specific extension data.
License
MIT © LoreSoft
| Product | Versions 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 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 is compatible. 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. |
| .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 is compatible. 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. |
-
.NETFramework 4.6.2
- Microsoft.Data.SqlClient (>= 7.0.1)
- SchemaSaurus.Metadata (>= 1.0.0)
-
.NETStandard 2.0
- Microsoft.Data.SqlClient (>= 7.0.1)
- SchemaSaurus.Metadata (>= 1.0.0)
-
net10.0
- Microsoft.Data.SqlClient (>= 7.0.1)
- SchemaSaurus.Metadata (>= 1.0.0)
-
net8.0
- Microsoft.Data.SqlClient (>= 7.0.1)
- SchemaSaurus.Metadata (>= 1.0.0)
-
net9.0
- Microsoft.Data.SqlClient (>= 7.0.1)
- SchemaSaurus.Metadata (>= 1.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 |
|---|---|---|
| 1.0.0 | 0 | 5/5/2026 |