Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
2816280
Add runner filtering, lifecycle stages and transaction modes
jogibear9988 Sep 22, 2026
55b5811
Add guarded SQL preview, native locks, CLI and DI integration
jogibear9988 Sep 22, 2026
9730079
Register packaged CLI database factories before connecting
jogibear9988 Sep 22, 2026
fedf79f
Harden tooling error boundaries, preview lifecycle and logging
jogibear9988 Sep 22, 2026
90d81ca
Preserve migration failures when releasing a deployment lock fails
jogibear9988 Sep 22, 2026
3747c8d
Make CLI rollback reject upward migration targets under the lock
jogibear9988 Sep 22, 2026
bde0a05
Replace stale matrix artifacts when failed CI jobs are rerun
jogibear9988 Sep 22, 2026
b4a6edd
Exercise concurrent runners and stale history under native deployment…
jogibear9988 Sep 22, 2026
5203ae2
Await both concurrent runner tasks before test database cleanup
jogibear9988 Sep 22, 2026
9804fef
Preserve runner review fixes while aligning the PR stack with master
jogibear9988 Sep 22, 2026
8cde651
Document upgrade source capabilities and refresh framework comparison
jogibear9988 Sep 22, 2026
aec29ab
Refresh framework comparison against the reviewed upgrade source
jogibear9988 Sep 22, 2026
508218a
Document script semantics, ownership cleanup and the complete issue i…
jogibear9988 Sep 22, 2026
593ac15
Refresh comparison and ownership guidance against the integrated stack
jogibear9988 Sep 22, 2026
5beaf05
Record individual baseline evidence for the historical issue audit
jogibear9988 Sep 22, 2026
b254927
Document PostgreSQL metadata scope and verified concurrent-runner cov…
jogibear9988 Sep 22, 2026
8ee8d39
Record successful CI for the final integrated source revision
jogibear9988 Sep 22, 2026
d9998be
Introduce v13 named table constraints and structured metadata
jogibear9988 Sep 22, 2026
dba4db4
Avoid reserved Oracle bind names in structured constraint metadata
jogibear9988 Sep 22, 2026
3962b37
Preserve named SQLite primary keys through table reconstruction
jogibear9988 Sep 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/workflows/dotnetpull.yml
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ jobs:
if: always()
with:
name: test-results-${{ matrix.database }}
overwrite: true
path: TestResults/
if-no-files-found: error
- name: Remove test container
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,4 @@ packages/

**/appsettings.Development.json
TestResults/
/artifacts/
11 changes: 11 additions & 0 deletions Migrator.slnx
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@
<Folder Name="/Core/">
<Project Path="src/Migrator/DotNetProjects.Migrator.csproj" />
</Folder>
<Folder Name="/examples/">
<Project Path="examples/FluentQuickStart/FluentQuickStart.csproj" />
</Folder>
<Folder Name="/Extras/">
<File Path="README.md" />
</Folder>
Expand All @@ -13,6 +16,14 @@
<Folder Name="/Solution Items/">
<File Path=".editorconfig" />
</Folder>
<Folder Name="/src/" />
<Folder Name="/src/Migrator.Extensions.DependencyInjection/">
<Project Path="src/Migrator.Extensions.DependencyInjection/DotNetProjects.Migrator.Extensions.DependencyInjection.csproj" />
</Folder>
<Folder Name="/src/Migrator.Tool/">
<Project Path="src/Migrator.Tool/DotNetProjects.Migrator.Tool.csproj" />
</Folder>
<Folder Name="/src/Migrator/" />
<Folder Name="/Tests/">
<Project Path="src/Migrator.Tests/Migrator.Tests.csproj" />
</Folder>
Expand Down
12 changes: 11 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ DotNetProjects.Migrator is a fork of [Migrator.NET](https://github.com/migratord
- **Bring your database driver.** The library does not directly reference database-driver packages; supply an ADO.NET connection or configure the driver factory.
- **SQLite schema handling.** This fork includes schema inspection and table-recreation logic for operations SQLite cannot perform directly.

Migrator is a library you embed in a migration host. It does not provide EF-style model-difference scaffolding, a packaged command-line runner, or built-in migration-content checksum validation.
The source upgrade adds a structured fluent API, runner filtering/lifecycle options, SQL-preview subset, native locking, a CLI project and optional Microsoft DI/logging integration. These changes are under review and **are not a released NuGet feature claim**. See the [runner and fluent guide](docs/runner-guide.md) and [detailed framework comparison](docs/migration-framework-comparison.md). EF-style model scaffolding and migration-content checksums remain outside the implementation.

## Installation and requirements

Expand Down Expand Up @@ -187,6 +187,16 @@ Important details:

See [ProviderFactory](src/Migrator/ProviderFactory.cs), [MigrationLoader](src/Migrator/MigrationLoader.cs) and [history implementation](src/Migrator/Providers/TransformationProvider.cs).

## Fluent API and deployment tooling

Run the [compiled fluent example](examples/FluentQuickStart/Program.cs):

```sh
dotnet run --project examples/FluentQuickStart
```

The example creates a complete table definition, previews it without changing history, runs a whole-session migration, then verifies automatic reversal. The [runner guide](docs/runner-guide.md) covers CLI commands, tags/profiles, maintenance, transactions, optional DI/logging, locks and preview limitations. Build the source packages locally to try the new tooling; no NuGet publication accompanies these PRs.

## Schema and data operations

Inside a migration, `Database` implements [`ITransformationProvider`](src/Migrator/Framework/ITransformationProvider.cs). It includes:
Expand Down
3 changes: 2 additions & 1 deletion docs/fluent-operation-coverage.json
Original file line number Diff line number Diff line change
Expand Up @@ -69,5 +69,6 @@
"MigrationApplied": "Explicit Context history/transaction APIs; not schema expressions",
"MigrationUnApplied": "Explicit Context history/transaction APIs; not schema expressions",
"IsMigrationApplied": "Explicit Context history/transaction APIs; not schema expressions",
"ExecuteSchemaBuilder": "Execute.WithProvider(p => p.ExecuteSchemaBuilder(legacyBuilder))"
"ExecuteSchemaBuilder": "Execute.WithProvider(p => p.ExecuteSchemaBuilder(legacyBuilder))",
"GetTableConstraints": "Schema.Table(table).ConstraintDefinitions()"
}
17 changes: 11 additions & 6 deletions docs/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -341,6 +341,11 @@ <h2 id="compare-title">Choose by how you work.</h2>
>
</p>
</div>
<p class="comparison-intro"><strong>Source upgrade under review, not a NuGet release:</strong>
fluent operations, SQL-preview subset, runner options, native locks and source CLI.
<a href="https://github.com/dotnetprojects/Migrator.NET/blob/master/docs/runner-guide.md">Read the runner guide and limitations</a>.
<a href="https://github.com/dotnetprojects/Migrator.NET/pull/177">Follow the PR stack</a>.
</p>
<p class="comparison-intro">
Migrator fits applications that want explicit C# migrations and
scoped history without coupling schema changes to an ORM. Other
Expand Down Expand Up @@ -397,7 +402,7 @@ <h2 id="compare-title">Choose by how you work.</h2>
<tbody>
<tr>
<th scope="row">Authoring style</th>
<td class="ours">Handwritten C#<br />Transformation API</td>
<td class="ours">Imperative C# + structured fluent API</td>
<td>Handwritten C#<br />Fluent DSL</td>
<td>C# generated from model changes; editable</td>
<td>SQL scripts; C# scripts also supported</td>
Expand Down Expand Up @@ -432,7 +437,7 @@ <h2 id="compare-title">Choose by how you work.</h2>
<tr>
<th scope="row">Downgrade an applied version</th>
<td class="ours">
Authored <code>Down()</code><br /><code>MigrateTo</code>
Authored <code>Down()</code> or supported automatic reversal
</td>
<td>
<code>Down()</code>; auto-reverse for supported expressions
Expand All @@ -444,7 +449,7 @@ <h2 id="compare-title">Choose by how you work.</h2>
<tr>
<th scope="row">History / module separation</th>
<td class="ours">
Scope in history table + selected assembly/types
Scope-filtered discovery + history
</td>
<td>Custom version tables + migration filtering</td>
<td>
Expand All @@ -455,15 +460,15 @@ <h2 id="compare-title">Choose by how you work.</h2>
</tr>
<tr>
<th scope="row">Transactions</th>
<td class="ours">Per migration</td>
<td class="ours">Per migration; none or verified whole-session modes</td>
<td>Per migration by default; configurable</td>
<td>Most migrations wrapped automatically</td>
<td>Opt-in per script or whole run; none by default</td>
<td>Per migration by default; whole-run option</td>
</tr>
<tr>
<th scope="row">Execution / deployment</th>
<td class="ours">Library; write your own host</td>
<td class="ours">Library + source CLI (unreleased)</td>
<td>In-process runner + CLI</td>
<td>CLI, SQL scripts, bundles, runtime API</td>
<td>Library; host in a console app or application</td>
Expand All @@ -481,7 +486,7 @@ <h2 id="compare-title">Choose by how you work.</h2>
</tr>
<tr>
<th scope="row">Repeatable / recurring work</th>
<td class="ours">Custom application code</td>
<td class="ours">Ordered maintenance + named profiles; no checksum repeatables</td>
<td>Maintenance migrations / profiles</td>
<td>Seeding APIs (EF 9+); custom code</td>
<td><code>RunAlways</code> scripts</td>
Expand Down
Loading
Loading