NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
NuGet · #1173 most downloaded on NuGet
FluentMigrator is a database migration framework for .NET written in C#. The basic idea is that you can create migrations which are simply classes that derive from the Migration base class and have a Migration attribute with a unique version number attached to them. Upon executing FluentMigrator, you tell it which version to migrate to and it will run all necessary migrations in order to bring your database up to that version. In addition to forward migration support, FluentMigrator also supports different ways to execute the migrations along with selective migrations called profiles and executing arbitrary SQL.
Last release 8 months ago
21 Jan 2026
Ships unpredictably
gaps range from 8 days to 1.9 years
Some releases are documented
notes for 24 of 41 stable releases
2 versions withdrawn
withdrawn after publishing
127 years old
43 releases · first in 1900
Latest changes and detailed release notes are available on GitHub Releases: https://github.com/fluentmigrator/fluentmigrator/releases
Latest changes and detailed release notes are available on GitHub Releases: https://github.com/fluentmigrator/fluentmigrator/releases
Full Changelog: v8.0.0...v8.0.1
Milestone log: https://github.com/fluentmigrator/fluentmigrator/milestone/62
One column per quarter.
Latest changes and detailed release notes are available on GitHub Releases: https://github.com/fluentmigrator/fluentmigrator/releases
Latest changes and detailed release notes are available on GitHub Releases: https://github.com/fluentmigrator/fluentmigrator/releases
Full Changelog: v7.2.0...v8.0.0
Milestone log: https://github.com/fluentmigrator/fluentmigrator/milestone/61
Use of standard dependency injection, configuration and logging libraries. Simplification of in-process runner configuration and instantiation. Minimu
Use of standard dependency injection, configuration and logging libraries. Simplification of in-process runner configuration and instantiation. Minimum .NET Framework version is 4.8, see https://aka.ms/msbuild/developerpacks for more information.
Details: https://github.com/fluentmigrator/fluentmigrator/releases
Remove obsolete IMigrationProcessor.ConnectionString (fixes #2036) by @PhenX in #2120
Remove obsolete constructor in DotConnectOracleDbFactory by @jzabroski in #2133
Remove obsolete constructors on DefaultVersionTableMetaData by @jzabroski in #2134
Remove obsolete ReflectionBasedDbFactory constructors by @jzabroski in #2138
Add comprehensive VitePress documentation website for FluentMigrator by @PhenX in #2166
Fix VitePress base path for organization GitHub Pages deployment by @Copilot in #2177
Add conditional net48 targeting to FluentMigrator.Analyzers.Tests by @Copilot in #2184
Configure FluentMigrator-specific Copilot instructions by @Copilot in #2180
Deploy docs to fluentmigrator/fluentmigrator.github.io repository by @Copilot in #2185
Full Changelog: v7.1.0...v7.2.0
Use of standard dependency injection, configuration and logging libraries. Simplification of in-process runner configuration and instantiation. Minimu
Use of standard dependency injection, configuration and logging libraries. Simplification of in-process runner configuration and instantiation. Minimum .NET Framework version is 4.8, see https://aka.ms/msbuild/developerpacks for more information.
Details: https://github.com/fluentmigrator/fluentmigrator/releases
As part of fixing #2018, IMigrationGenerator now has explicit GeneratorId and GeneratorIdAliases properties.
ProcessorId constants class is now named ProcessorIdConstants. There is now a parallel GeneratorIdConstants class. Generally, these will be 1:1, but there may be useful scenarios to decouple the two.
As part of fixing #2018, AddPostgres no longer registers PostgresProcessor and PostgresGenerator (the base interfaces). It will now always register the "latest" database version. Currently, Postgres15_0Processor and Postgres15_0Generator. Generally, this should have minimal impact to end users as the main impact would be if you were on a 14 year old version of Postgres.
Full Changelog: v7.0.0...v7.1.0
Use of standard dependency injection, configuration and logging libraries. Simplification of in-process runner configuration and instantiation. Minimu
Use of standard dependency injection, configuration and logging libraries. Simplification of in-process runner configuration and instantiation. Minimum .NET Framework version is 4.8, see https://aka.ms/msbuild/developerpacks for more information.
Details: https://github.com/fluentmigrator/fluentmigrator/releases
AppliedOn by @nathanpovo in #1847
MicrosoftBuildLogger. by @teo-tsirpanis in #1905The main area we could use help right now is with fluentmigrator/documentation repository and automating the documentation release process further. Additionally, fixing build related warnings for missing MSDoc comments would be extremely appreciated.
Full Changelog: v6.2.0...v7.0.0
Use of standard dependency injection, configuration and logging libraries. Simplification of in-process runner configuration and instantiation. Minimu
Use of standard dependency injection, configuration and logging libraries. Simplification of in-process runner configuration and instantiation. Minimum .NET Framework version is 4.8, see https://aka.ms/msbuild/developerpacks for more information.
Details: https://github.com/fluentmigrator/fluentmigrator/releases
Full Changelog: v6.1.4...v6.2.0
Use of standard dependency injection, configuration and logging libraries. Simplification of in-process runner configuration and instantiation. Minimu
Use of standard dependency injection, configuration and logging libraries. Simplification of in-process runner configuration and instantiation. Minimum .NET Framework version is 4.8, see https://aka.ms/msbuild/developerpacks for more information.
Details: https://github.com/fluentmigrator/fluentmigrator/releases
Full Changelog: v6.1.3...v6.1.4
Use of standard dependency injection, configuration and logging libraries. Simplification of in-process runner configuration and instantiation. dotnet
Use of standard dependency injection, configuration and logging libraries. Simplification of in-process runner configuration and instantiation. dotnet-fm is now a global .NET Core 2.1 tool. Minimum .NET Framework version is 4.6.2, see https://aka.ms/msbuild/developerpacks for more information.
Details: https://github.com/fluentmigrator/fluentmigrator/releases
Full Changelog: v6.1.1...v6.1.2
Use of standard dependency injection, configuration and logging libraries. Simplification of in-process runner configuration and instantiation. dotnet
Use of standard dependency injection, configuration and logging libraries. Simplification of in-process runner configuration and instantiation. dotnet-fm is now a global .NET Core 2.1 tool. Minimum .NET Framework version is 4.6.2, see https://aka.ms/msbuild/developerpacks for more information.
Details: https://github.com/fluentmigrator/fluentmigrator/releases
Full Changelog: v6.1.0...v6.1.1
Use of standard dependency injection, configuration and logging libraries. Simplification of in-process runner configuration and instantiation. dotnet
Use of standard dependency injection, configuration and logging libraries. Simplification of in-process runner configuration and instantiation. dotnet-fm is now a global .NET Core 2.1 tool. Minimum .NET Framework version is 4.6.2, see https://aka.ms/msbuild/developerpacks for more information.
Details: https://github.com/fluentmigrator/fluentmigrator/releases
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Stripping comments can be disabled in _dotnet-fm_ runner. Default is true, will become false in 4.x
Runner: Default schema name can be set (PR #907)
WithGlobalConnectionString accepting a lambda for lazy connection string query (PR #919)PostgresOptions.ForceQuote to falseForce Quote=falseForce Quote=trueCurrentVersionMigrationConstraint to ensure that this
migration only gets run when the database version is greater or equal
than the given number. This allows some kind of migrations that will only
be executed when a conversion is necessary.IConventionSet loaded from given assemblies (Issue #916)RunnerOptions.StartVersion (PR #992)// instead of # for comments (Issue #859)# for comments (Issue #859)# for comments (Issue #859)Execute.WithConnection delegate (Issue #1001)Migration loader doesn't try to load profiles anymore (fixes #904)
Avoid duplicate Dispose calls (fixes #901)
The FluentMigrator.Console package doesn't depend on the FluentMigrator package, because it's already included
New IFilteringMigrationSource to avoid unnecessary instantiations
IFilteringMigrationSource to avoid unnecessary instantiationsIVersionTableMetaDataSourceItem to specify multiple places to search for version table metadatadotnet-fm and Migrate.exe are now referencing FSharp.Core which should ease the problems with F# (issue #883).IConfigurationRoot for the connection string if IConfiguration couldn't be founddotnet-fm now uses the Oracle beta ADO.NET driverOracle plans to release a non-beta version of the driver in Q3, but
it's the only Oracle driver that works under Linux/MacOS. The console
tool (Migrate.exe) is more Windows-centric and will therefore keep
using the standard Oracle ADO.NET library. The dotnet-fm is mostly
used on non-Windows platforms and is therefore predestinated to use
the new beta driver.
The statement from Oracle can be found on the Oracle website.
The console tool will switch to the new driver when it becomes stable.
var services = new ServiceCollection()
.AddFluentMigratorCore()
.ConfigureRunner(rb => rb
.AddSQLite()
.ScanIn(typeof(YourType).Assembly));
// There is a fluent interface to configure the targets for ScanIn
Configurations for ScanIn(assemblies):
--+-------------------------------------------+->
| ^
| |
+- For -+- All() ---------------------------+
^ | ^
| | |
| +- Migrations() ------------+-->+-->+
| | ^ |
| | | |
| +- VersionTableMetaData() --+ |
| | ^ |
| | | |
| +- EmbeddedResources() -----+ |
| |
| v
+<--------------------------------------+
Example:
var services = new ServiceCollection()
.AddFluentMigratorCore()
.ConfigureRunner(rb => rb
.AddSQLite()
.ScanIn(typeof(YourType).Assembly)
.For.Migrations()
.For.EmbeddedResources());
// There is a fluent interface to configure the targets for ScanIn
This allows the reconfiguration of the connection string/used database at run-time.
The following option classes are now resolved using IOptionSnapshot<T>:
ProcessorOptionsSelectingProcessorAccessorOptionsSelectingGeneratorAccessorOptionsTypeFilterOptionsThe following services are now scoped instead of singleton:
IVersionTableMetaDataAccessorIVersionTableMetaDataIMigrationSourceIMigrationInformationLoaderThe MigrationSource now consumes all registered IMigrationSourceItem instances.
AppConfigConnectionStringAccessorOptions to allow leading the connection strings from the *.config xml file (deprecated, only for transition to Micros…
The new documentation is online on https://fluentmigrator.github.io.
ProcessorOptions.Timeout is now of type System.TimeSpan?MigrationRunner.MaintenanceLoader is now read-onlyMigrationRunner.CaughtExceptions returns now a IReadOnlyListdotnet-fm is now a global tool and requires at least the .NET Core tooling 2.1-preview2IConfiguration service (Microsoft.Extensions.Configuration)IMigrationExpressionValidator for custom migration expression validationNULL constraint for custom types for PostgreSQL and SQL ServerIAssemblyCollection and all its implementationsIAnnouncer and all its implementationsIMigrationRunnerConventions.GetMigrationInfoIProfileLoader.ApplyProfiles()IProfileLoader.FindProfilesInIMigrationProcessorOptionsIMigrationProcessorFactory and all its implementationsIRunnerContext and RunnerContext, replaced by several dedicated options classes:
RunnerOptions are the new RunnerContext (minus some properties extracted into separate option classes)ProcessorOptions for global processor-specific optionsGeneratorOptions to allow setting the compatibility modeTypeFilterOptions for filtering migrations by namespaceAnnouncerOptions to enable showing SQL statements and the elapsed timeSelectingProcessorAccessorOptions allows selection of a processor by its identifierSelectingGeneratorAccessorOptions allows selection of a generator by its identifierAppConfigConnectionStringAccessorOptions to allow leading the connection strings from the *.config xml file (deprecated, only for transition to Microsoft.Extensions.Configuration)CompatabilityMode (is now ComatibilityMode)ApplicationContext in various interfaces/classesManifestResourceNameWithAssembly replaced by ValueTupleMigrationGeneratorFactoryMigrationProcessorFactoryProviderITypeMap.GetTypeMap(DbType, int, int)IDbFactory: Only the implementations will remainThe library assumes that in ProcessorOptions.ConnectionString is either a connection string or
a connection string identifier. This are the steps to load the real connection string.
IConnectionStringReader implementations
IConnectionStringReaderProcessorOptions.ConnectionStringThe connection string stored in ProcessorOptions.ConnectionString might be overridden
by registering the IConnectionStringReader instance PassThroughConnectionStringReader
as scoped service.
When no connection string could be found, the SelectingProcessorAccessor returns
a ConnectionlessProcessor instead of the previously selected processor.
// Initialize the services
var serviceProvider = new ServiceCollection()
.AddLogging(lb => lb.AddFluentMigratorConsole())
.AddFluentMigratorCore()
.ConfigureRunner(
builder => builder
.AddSQLite()
.WithGlobalConnectionString(connectionString)
.WithMigrationsIn(typeof(AddGTDTables).Assembly))
.BuildServiceProvider();
// Instantiate the runner
var runner = serviceProvider.GetRequiredService<IMigrationRunner>();
// Run the migrations
runner.MigrateUp();
This adds the FluentMigrator services to the service collection and configures the runner to use SQLite with the given connection string, announcer and migration assembly.
Now you can instantiate the runner using the built service provider and use its functions.
### Added - #856 New constructors to enable passing a custom expression convention set
### Fixed - #859: The pound sign is only recognized when it's only preceeded by whitespace
net452 build for the console runner to enable usage of the latest MySQL ADO.NET provider
tools/net452/x86/Migrate.exe)This has become necessary to enable a better out-of-the-box experience for the migration tool.
Unlisted due to unintentional breaking change.
Unlisted due to unintentional breaking change.
### Fixed - #858: Don't even try to set the command timeout for SQL Server CE
### Fixed - #856: Don't fail when an assembly couldn't be loaded - #848: MySql4ProcessorFactory used the MySql5Generator
FluentMigrator.Console now contains the migration tool in the tools/ directory
FluentMigrator.Console now contains the migration tool in the tools/ directoryFluentMigrator.Tools package added as upgrade pathShow (BREAKING) for migrations with breaking changes
IQuerySchema.DatabaseType now returns SqlServer2016, etc... and not SqlServer any moreIMigrationConventions was renamed to IMigrationRunnerConventionsIMigrationContext doesn't contain the IMigrationConventions any more
IConventionSetICanBeConventional was removed during the overhaul of the expression convention systemNonUnicodeString for ANSI stringsFluentMigrator.Tools was split into the following packages
FluentMigrator.Console: The Migrate.exe toolFluentMigrator.MSBuild: The MSBuild Migrate taskALTER/DROP DEFAULT value supportNVARCHAR for AsStringWITH (ONLINE=ON/OFF) supportForce Quote=true to enforce quotesSetExistingRowsTo supports SystemMethodsStopOnError flagFluentMigrator.Runner to FluentMigrator.Runner.<Database>FluentMigrator.Extensions.SqlServer(not applied) for unapplied migrations(BREAKING) for migrations with breaking changesIAnnouncer.WriteTagAttribute by inheritanceSqlBatchParser to parse batches of SQL statements (GO statement support)Your coding agent can read these notes before it upgrades. Set up the MCP server →