SchemaSaurus.Metadata
1.4.6
dotnet add package SchemaSaurus.Metadata --version 1.4.6
NuGet\Install-Package SchemaSaurus.Metadata -Version 1.4.6
<PackageReference Include="SchemaSaurus.Metadata" Version="1.4.6" />
<PackageVersion Include="SchemaSaurus.Metadata" Version="1.4.6" />
<PackageReference Include="SchemaSaurus.Metadata" />
paket add SchemaSaurus.Metadata --version 1.4.6
#r "nuget: SchemaSaurus.Metadata, 1.4.6"
#:package SchemaSaurus.Metadata@1.4.6
#addin nuget:?package=SchemaSaurus.Metadata&version=1.4.6
#tool nuget:?package=SchemaSaurus.Metadata&version=1.4.6
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"],
Tables = ["Customer", "Sales.Orders"],
IncludeStoredProcedures = false,
IncludeScalarFunctions = false,
};
var model = await reader.ReadAsync(connectionString, options);
Tables entries may be schema qualified ("Sales.Orders"), which pins the table to that
schema; the first dot separates the schema from the table name. Unqualified entries
("Customer") match that name in any schema.
Names are passed to the database as written and compared with its own identifier rules.
A PostgreSQL table created unquoted as Sales.Orders is stored as sales.orders and has
to be filtered with that spelling; quoted identifiers keep their case.
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)!;
Command Line Export
Install SchemaSaurus as a .NET tool, then use the export command to capture database metadata as JSON.
dotnet tool install --global SchemaSaurus
Write JSON to a file with -o / --output:
SchemaSaurus export -c "Server=.;Database=AdventureWorks;Integrated Security=true;TrustServerCertificate=true" -p SqlServer -o .\schema.json
When --output is omitted, JSON is written to stdout for piping or redirection:
SchemaSaurus export -c "Data Source=.\sample.db" -p SQLite | jq .databaseName
Supported providers are SqlServer, PostgreSQL, MySQL, Oracle, and SQLite.
Filter the exported metadata with --schema and --table, and exclude object types with boolean switches:
SchemaSaurus export -c "Server=.;Database=AdventureWorks;Integrated Security=true;TrustServerCertificate=true" -p SqlServer -o .\schema.json --schema dbo --table Customer --table Sales.Orders --exclude-stored-procedures --exclude-sequences
Available exclusion switches are --exclude-views, --exclude-stored-procedures, --exclude-scalar-functions, --exclude-table-valued-functions, --exclude-sequences, and --exclude-user-defined-types.
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 was computed. 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. |
-
.NETStandard 2.0
- System.Collections.Immutable (>= 10.0.12)
- System.Text.Json (>= 10.0.12)
-
net10.0
- No dependencies.
-
net8.0
- No dependencies.
-
net9.0
- No dependencies.
NuGet packages (5)
Showing the top 5 NuGet packages that depend on SchemaSaurus.Metadata:
| Package | Downloads |
|---|---|
|
SchemaSaurus.SqlServer
SQL Server schema reader for SchemaSaurus supporting SQL Server 2016 and later, Azure SQL Database, and Azure SQL Managed Instance. |
|
|
SchemaSaurus.Sqlite
SQLite schema reader for SchemaSaurus supporting SQLite 3.31.0 and later. |
|
|
SchemaSaurus.Oracle
Oracle schema reader for SchemaSaurus supporting Oracle 12c and later. |
|
|
SchemaSaurus.MySql
MySQL schema reader for SchemaSaurus supporting MySQL 5.7 and later. |
|
|
SchemaSaurus.PostgreSql
PostgreSQL schema reader for SchemaSaurus supporting PostgreSQL 12 and later. |
GitHub repositories
This package is not used by any popular GitHub repositories.