SchemaSaurus.SqlServer 1.0.0

dotnet add package SchemaSaurus.SqlServer --version 1.0.0
                    
NuGet\Install-Package SchemaSaurus.SqlServer -Version 1.0.0
                    
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="SchemaSaurus.SqlServer" Version="1.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="SchemaSaurus.SqlServer" Version="1.0.0" />
                    
Directory.Packages.props
<PackageReference Include="SchemaSaurus.SqlServer" />
                    
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 SchemaSaurus.SqlServer --version 1.0.0
                    
#r "nuget: SchemaSaurus.SqlServer, 1.0.0"
                    
#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 SchemaSaurus.SqlServer@1.0.0
                    
#: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=SchemaSaurus.SqlServer&version=1.0.0
                    
Install as a Cake Addin
#tool nuget:?package=SchemaSaurus.SqlServer&version=1.0.0
                    
Install as a Cake Tool

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.

Build status License: MIT Coverage Status

Package Version
SchemaSaurus.Metadata SchemaSaurus.Metadata
SchemaSaurus.SqlServer SchemaSaurus.SqlServer
SchemaSaurus.PostgreSql SchemaSaurus.PostgreSql
SchemaSaurus.MySql SchemaSaurus.MySql
SchemaSaurus.Oracle SchemaSaurus.Oracle
SchemaSaurus.Sqlite SchemaSaurus.Sqlite

Features

  • Immutable, JSON round-trippable model rooted at DatabaseModel with 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-targetnetstandard2.0, net462, net8.0, net9.0, and net10.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.

  • TablesColumns, PrimaryKey, UniqueConstraints, CheckConstraints, Indexes, ForeignKeys, Triggers
  • ViewsColumns, Definition
  • StoredProcedures / ScalarFunctions / TableValuedFunctionsParameters, ReturnColumns, Definition
  • Sequences, UserDefinedTypes

Every metadata element implements IAnnotatable for engine-specific extension data.

License

MIT © LoreSoft

Product 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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