fluentmigrator

Fluent migrations framework for .NET

APACHE-2.0 License

Stars
3.1K
Committers
220

Bot releases are visible (Hide)

fluentmigrator - Hotfix to keep comments when using `dotnet-fm`

Published by fubar-coder over 5 years ago

You're now able to disable stripping of comments with the option --strip:false.

fluentmigrator - Comments are here to stay (and other nice stuff)

Published by fubar-coder over 5 years ago

New

  • Runner: Default schema name can be set (PR #907)
  • Stripping comments can be disabled (which will become the default in 4.x, Issue #956, PR #925)
  • WithGlobalConnectionString accepting a lambda for lazy connection string query (PR #919)
  • New Oracle 12c support
    • Identity generator options (PR #921)
      • Maximum name length increased to 128 (PR #940)
  • Disable quoted names for PostgreSQL (Issue #958, PR #961)
    • Implemented by setting PostgresOptions.ForceQuote to false
    • Can be set with the provider option Force Quote=false
    • Default behaviour is Force Quote=true
  • PostgreSQL: Added XML type (Issue #950, PR #995)
  • Migration conditions (Issue #838, PR #990)
    • New attribute: CurrentVersionMigrationConstraint 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.
  • Allow loading of maintenances without tags (Issue #983, PR #984)
  • SQL Server 2008: SPARSE column option (PR #946)
  • IConventionSet loaded from given assemblies (Issue #916)

Documentation

  • Clarification remark for RunnerOptions.StartVersion (PR #992)

Fixes

  • Oracle: Fixed preview mode (PR #920, #926)
  • SQL Server CE: Fixed preview mode (PR #920, #926)
  • SQLite: Fixed byte array parameters (PR #943)
  • SQL Anywhere uses // instead of # for comments (Issue #859)
  • SQL Server: Don't use # for comments (Issue #859)
  • SQLite: Don't use # for comments (Issue #859)
  • PostgreSQL: Description generator now works with set default schema name. (Issue #971, #1000, PR #999)
  • Don't open transaction for preview (Issue #957)
  • Transaction is now always passed to Execute.WithConnection delegate (Issue #1001)

Contributors

  • Alegrowin
  • coryalbert
  • dfaruque
  • EBMSPTYLTD
  • elken
  • groogiam
  • hansehe
  • igitur
  • Jogge
  • jzabroski
  • PhenX
  • poimis
  • TerraVenil
  • zamoa
fluentmigrator - Make Profiles work again

Published by fubar-coder over 6 years ago

Fixed

  • Migration loader doesn't try to load profiles anymore (fixes #904)
fluentmigrator - Implement Dispose pattern to avoid ObjectDisposedException

Published by fubar-coder over 6 years ago

Fixed

  • Avoid duplicate Dispose calls (fixes #901)
fluentmigrator - Tool package updates

Published by fubar-coder over 6 years ago

Fixed

  • The FluentMigrator.Console package doesn't depend on the FluentMigrator package, because it's already included
fluentmigrator - Support for configuration changes and better assembly scanning

Published by fubar-coder over 6 years ago

An upgrade guide is available here:

https://fluentmigrator.github.io/articles/guides/upgrades/guide-3.0-to-3.1.html

Added

  • New IFilteringMigrationSource to avoid unnecessary instantiations
  • New IVersionTableMetaDataSourceItem to specify multiple places to search for version table metadata
  • dotnet-fm and Migrate.exe are now referencing FSharp.Core which should ease the problems with F# (issue #883).
  • New configuration for types from assemblies (see below)

Changed

  • #877: Connection specific information should be resolved as scoped
  • #884: Embedded script cannot be found in assemblies on .NET Core
  • #888: VersionTable not changed after upgrading to 3.0
  • Query IConfigurationRoot for the connection string if IConfiguration couldn't be found

Fixed

  • #886: Using profiles in 3.x versions
  • #892: Nullable types are not supported in MSBuild runner
  • #890: OracleManaged Migrations fail with runtime Exceptions

Details

dotnet-fm now uses the Oracle beta ADO.NET driver

Oracle 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.

New configuration options

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

Dependency injection changes (issue #877)

Supported scenario

This allows the reconfiguration of the connection string/used database at run-time.

Applies to

  • Connection string
  • Processor/generator selection
  • Type filters

Changes

The following option classes are now resolved using IOptionSnapshot<T>:

  • ProcessorOptions
  • SelectingProcessorAccessorOptions
  • SelectingGeneratorAccessorOptions
  • TypeFilterOptions

The following services are now scoped instead of singleton:

  • IVersionTableMetaDataAccessor
  • IVersionTableMetaData
  • IMigrationSource
  • IMigrationInformationLoader

The MigrationSource now consumes all registered IMigrationSourceItem instances.

fluentmigrator - Standard libraries for dependency injection, configuration, logging

Published by fubar-coder over 6 years ago

The new documentation is online on https://fluentmigrator.github.io.

Upgrade Guide

https://fluentmigrator.github.io/articles/guides/upgrades/guide-2.0-to-3.0.html

What changed?

Breaking changes

  • #850: Set minimum .NET Framework version to 4.6.1. Older versions aren't supported anymore.
  • ProcessorOptions.Timeout is now of type System.TimeSpan?
  • MigrationRunner.MaintenanceLoader is now read-only
  • MigrationRunner.CaughtExceptions returns now a IReadOnlyList
  • dotnet-fm is now a global tool and requires at least the .NET Core tooling 2.1-preview2

Added

Fixed

  • #767: Append NULL constraint for custom types for PostgreSQL and SQL Server

Deprecated

  • IAssemblyCollection and all its implementations
  • IAnnouncer and all its implementations
  • IMigrationRunnerConventions.GetMigrationInfo
  • IProfileLoader.ApplyProfiles()
  • IProfileLoader.FindProfilesIn
  • IMigrationProcessorOptions
  • IMigrationProcessorFactory and all its implementations
  • IRunnerContext 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 options
    • GeneratorOptions to allow setting the compatibility mode
    • TypeFilterOptions for filtering migrations by namespace
    • AnnouncerOptions to enable showing SQL statements and the elapsed time
    • SelectingProcessorAccessorOptions allows selection of a processor by its identifier
    • SelectingGeneratorAccessorOptions allows selection of a generator by its identifier
    • AppConfigConnectionStringAccessorOptions 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/classes
  • ManifestResourceNameWithAssembly replaced by ValueTuple
  • MigrationGeneratorFactory
  • MigrationProcessorFactoryProvider
  • ITypeMap.GetTypeMap(DbType, int, int)
  • IDbFactory: Only the implementations will remain
  • Several non-DI constructors

Additional information

Connection string handling

The 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.

  • Queries all IConnectionStringReader implementations
    • When a connection string is returned by one of the readers, then this
      connection string will be used
    • When no connection string is returned, try reading from the next IConnectionStringReader
  • When no reader returned a connection string, then return ProcessorOptions.ConnectionString

The 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.

Instantiating a migration runner

// 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.

fluentmigrator - Added missing constructor overloads for expression convention set

Published by fubar-coder over 6 years ago

Added

  • #856 New constructors to enable passing a custom expression convention set
fluentmigrator - Hotfix for issue #859

Published by fubar-coder over 6 years ago

Fixed

  • #859: The pound sign is only recognized when it's only preceeded by whitespace
fluentmigrator - Added ADO.NET providers to migration console tool

Published by fubar-coder over 6 years ago

Added

  • net452 build for the console runner to enable usage of the latest MySQL ADO.NET provider

Changed

  • Added more ADO.NET providers for the console
  • The tools are in platform-specific sub-directories again (e.g. tools/net452/x86/Migrate.exe)

This has become necessary to enable a better out-of-the-box experience for the migration tool.

fluentmigrator - Hotfix for issue #858

Published by fubar-coder over 6 years ago

Fixed

  • #858: Don't even try to set the command timeout for SQL Server CE
fluentmigrator - Hotfix for issue #856

Published by fubar-coder over 6 years ago

  • #856: Don't fail when an assembly couldn't be loaded
  • #848: MySql4ProcessorFactory used the MySql5Generator
fluentmigrator - Hotfix for broken FM.Console package

Published by fubar-coder over 6 years ago

Fixed

  • FluentMigrator.Console now contains the migration tool in the tools/ directory (fixes #846)

Added

  • Obsolete FluentMigrator.Tools package added as upgrade path
fluentmigrator - .NET Standard 2.0 support, finally!

Published by fubar-coder over 6 years ago

Breaking changes

  • IQuerySchema.DatabaseType now returns SqlServer2016, etc... and not SqlServer any more
  • Database specific code was moved into its own assemblies
  • IMigrationConventions was renamed to IMigrationRunnerConventions
  • IMigrationContext doesn't contain the IMigrationConventions any more
    • Expression conventions are now bundled in the new IConventionSet
  • ICanBeConventional was removed during the overhaul of the expression convention system
  • Strings are now Unicode by default. Use NonUnicodeString for ANSI strings
  • FluentMigrator.Tools was split into the following packages
    • FluentMigrator.Console: The Migrate.exe tool
    • FluentMigrator.MSBuild: The MSBuild Migrate task

Added

  • Framework: .NET Standard 2.0 support
  • Database:
    • SQL Anywhere 16 support
    • SQL Server 2016 support
    • MySQL:
      • ALTER/DROP DEFAULT value support
    • MySQL 5:
      • New dialect
      • NVARCHAR for AsString
    • SQL Server 2005
      • WITH (ONLINE=ON/OFF) support
      • 64 bit identity support
    • Redshift (Amazon, experimental)
    • Firebird
      • New provider option: Force Quote=true to enforce quotes
    • All supported databases
      • Streamlined table/index schema quoting
  • Unique Constraints: Non-Distinct NULL support (SQL Server 2008 and SQL Anywhere 16)
  • Types: DateTime2 support
  • Dialect: SQLite foreign key support
  • Insert/Update/Delete: DbNull support
  • Expression:
    • IfDatabase: Predicate support
    • IfDatabase: Method delegation support
    • Index: Creation with non-key columns
    • Conventions: Default schema name support
    • SetExistingRowsTo supports SystemMethods
    • Passing arguments to embedded SQL scripts
  • Runner:
    • TaskExecutor: HasMigrationsToApply support
    • Case insensitive arguments support
    • StopOnError flag

Changed

  • Project:
    • Moving database specific code from FluentMigrator.Runner to FluentMigrator.Runner.<Database>
    • Extension methods for - e.g. SqlServer - are now in FluentMigrator.Extensions.SqlServer
  • Database:
    • MySQL: Now announcing SQL scripts
  • Runner:
    • Better error messages
    • ListMigrations: showing (not applied) for unapplied migrations
    • Show (BREAKING) for migrations with breaking changes
    • MSBuild task is available as separate package (with custom .targets file)
    • Use provider default command timeout when no global timeout is set

Deprecated

  • Generic:
    • IAnnouncer.Write

Removed

  • Generic:
    • Deprecated functions
    • SchemaDump experiment
    • T4 experiment
  • Framework:
    • .NET Framework 3.5 support
  • Runner:
    • NAnt build task

Fixed

  • Runner:
    • Match TagAttribute by inheritance
  • Processors (database specific processing of expressions):
    • Using the new SqlBatchParser to parse batches of SQL statements (GO statement support)
  • Database:
    • Hana: Fixed syntax for dropping a primary key
    • Oracle: Table schema now added more consistently
  • Tests:
    • Mark integration tests as ignored when no active processor could be found
fluentmigrator - 1.6.2

Published by fubar-coder over 8 years ago

  • #710 Explicitly call Cancel on IMigrationScope to rollback transaction contributed by Eivind Gussiås Løkseth (eloekset)
  • #691 Update typemap for mySql to reflect the increased length available to Varchars contributed by Robert Pethick (RobPethick)
  • #686 Adding AutoReversingMigrationTest to test reverse logic is implemented contributed by Robert Pethick (RobPethick)
  • #682 Update SQL Server Ce Generator to use SELECT UNION ALL syntax to support multiple row inserts contributed by Robert Pethick (RobPethick)
  • #681 Fixed issue #618 SqlServerCe Typemap contributed by Eivind Gussiås Løkseth (eloekset)
  • #679 Invalid syntax error if description contains quote contributed by Andreas Vilinski (vilinski)
  • #674 Unquote a quoted object name contributed by Mark Junker (fubar-coder)
  • #676 Firebird: Quote names beginning with underscore contributed by Mark Junker (fubar-coder)
  • #654 Oracle: Error when using single quote character ( ' ) as argument for WithDescription(string) method contributed by Sergey Baranov (barser)
  • #652 IndexOutOfRange Exception when rollingback a firebird migration on a table containing implicitly declared foreign key contributed by amroel
  • #433 Allow CurrentUTCDateTime SystemMethods in SQLLite contributed by Bill Belanger (Merwer)

Commits: cac48b707d...f17dca3ba0

fluentmigrator - 1.6.1

Published by tommarien almost 9 years ago

  • #665 - [T4]Missing quotes on AsCustom contributed by Giuseppe Lippolis (spaccabit)
  • #663 - Fixed SqlServerCe typemap contributed by Nuno Santos (nakataaaa)
  • #649 - Fix incorrect console argument in DisplayHelp contributed by David Mohundro (drmohundro)
  • #648 - Modified DefaultMigrationConventions to allow Tags to be inheritable contributed by Christopher Bright (cbright)
  • #647 - Allow for types with no namespaces contributed by Steve White (stevewhite)
  • #646 - Update OracleTypeMap.cs contributed by Tim McGee (jarz)
  • #645 - Oracle: Improper Currency precision +fix
  • #641 - Add DateTimeOffset to Oracle type map contributed by Victor Grigoriu (vgrigoriu)
  • #632 - fixed issue #446 (no semicolons after Update/Create statements in Postgres) contributed by Cristian Lupașcu (wolfascu)
  • #631 - Fix bug #630 byte arrays aren't serialised correctly in postgresql contributed by Will Price (willprice)
  • #630 - byte array throws a syntax error when inserting into postgresql +fix
  • #629 - changed MSBuild Migrate task to run in separate app domain contributed by Michael Murillo (zendever)
  • #628 - SqlServer Ce requires NULL to be added to alter table script contributed by Tom Marien (tommarien)
  • #627 - Issue with running MSBuild Migrate task from within Visual Studio +fix
  • #626 - Tags attribute isn't really inheritable (even though it's "tagged" as such)...
  • #617 - SqlServerCe: Specifies NVARCHAR(16) as typemap for time +fix
  • #616 - SqlServerCe: Alter column to nullable does not work +fix
  • #446 - Postgres -of -p command does not generate semicolons after Update/Create statements +fix

Commits: 40a435a60f...cac48b707d

fluentmigrator - 1.6.0

Published by tommarien over 9 years ago

Small breaking change

  • When using IVersionTableMetadata, we've added ApplicationContext and integrated IVersionMetadataExtended (ownsschema), either make the necessary adjustments or inherit from DefaultVersionTableMetadata

Fixes

  • #623 - Use semantic versioning on nugets
  • #622 - Removed version metadata extended contributed by Tom Marien (tommarien)
  • #620 - Datetimeoffset feature patch - not quoting the values appropriately contributed by Richard Bennett (dealproc) +fix
  • #619 - Corrected SqlServer2000 typemap (closes #571) contributed by Tom Marien (tommarien)
  • #613 - #612 Update Oracle TypeMap contributed by Jonny Bekkum (jonnybee) +fix
  • #612 - Oracle TypeMap must allow up to 4000 characters in VARCHAR2 / NVARCHAR2 fields
  • #611 - add support of foregn key and index generation for postgresql's T4 ge… contributed by Yusuke Ito (itn3000)
  • #610 - Sql server exists performance contributed by Giuseppe Lippolis (spaccabit)
  • #607 - Consider maintenance without tags and AsString Collation overload contributed by Kat Lim Ruiz (katlimruiz) +Feature
  • #606 - Maintenance class without tags is not executed (it should) +Feature
  • #597 - Introducing FluentMigrator in an existing production database
  • #596 - Fix bugs and mistakes in firebird typemapping contributed by Lukas Wöhrl (woehrl01) +fix
  • #595 - improved character case handling in firebird contributed by Lukas Wöhrl (woehrl01)
  • #594 - Smallimprovements and typo fix contributed by Lukas Wöhrl (woehrl01)
  • #593 - fixed bug in and improved sql server schema dumper contributed by Lukas Wöhrl (woehrl01)
  • #586 - Add application context to versiontablemetadata contributed by (istaheev)
  • #582 - Allows to specify custom version table meta data contributed by (istaheev)
  • #571 - NVARCHAR(MAX) on Sql2000 +fix

Commits: 78a817d78a...40a435a60f

fluentmigrator - 1.5.1

Published by tommarien over 9 years ago

Features:

  • #590 - Improvements for PostgreSql provider contributed by Mladen Macanović (stsrki) [Description Fix, Sequential UUID]

Fixes:

List of all changes

fluentmigrator - 1.5.0

Published by tommarien over 9 years ago

Features:

  • #467 - Allow many assemblies to contribute IMigrations in the same migrations run (JulianRooze)
  • #529 - Support SAP HANA Database (FabioNascimento)
  • #570 - Add options to generate migrations without database connection (andrewhanson)
  • #577 - Added ability to set Transaction Behavior and use Tags with MaintenanceAttribute (unrealguard)

Improvements:

  • #553 - Postgresql now handles comments (itn3000)
  • #573 - Provides an ability to create a column and specify that the timezone information should be stored with the date (dealproc)

Fixes:

  • #572 - SetExistingRowsTo: will not longer change column length (mstancombe)
  • #585 - Jet: Added Transaction to expression.Operation (albatrossen)
  • #576 - Firebird: quote only keywords otherwise quoting should be optional and not the default & various (amroel)
  • #568 - Oracle: Fix Escaping of Guid's, for insertdataexpression etc (tommarien)

Various:

List of all changes

fluentmigrator - 1.4.0

Published by tommarien almost 10 years ago

  • #562 - Oracle Alter Default constraints closes #551 contributed by Tom Marien (tommarien)
  • #561 - Support for Sqlserver2014 contributed by Daniel Lee (daniellee) +Feature
  • #558 - Fix for #398 contributed by Dan Corder (DanCorder) +fix
  • #537 - Added TimestampedMigrationAttribute contributed by Eric Burcham (ericburcham) +Feature

List of all changes