Changelog History
Page 2
-
v3.2.0 Changes
April 15, 2019🆕 New
- 0️⃣ Runner: Default schema name can be set (PR #907)
- 0️⃣ 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
- Disable quoted names for PostgreSQL (Issue #958, PR #961)
- Implemented by setting
PostgresOptions.ForceQuote
tofalse
- Can be set with the provider option
Force Quote=false
- Default behaviour is
Force Quote=true
- Implemented by setting
- 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.
- New attribute:
- 👍 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) - 0️⃣ 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
-
v3.1.3 Changes
June 25, 2018🛠 Fixed
- 🛠 Migration loader doesn't try to load profiles anymore (fixes #904)
-
v3.1.2 Changes
June 21, 2018🛠 Fixed
- 🛠 Avoid duplicate Dispose calls (fixes #901)
-
v3.1.1 Changes
June 11, 2018🛠 Fixed
- 📦 The FluentMigrator.Console package doesn't depend on the FluentMigrator package, because it's already included
-
v3.1.0 Changes
June 01, 2018➕ Added
- 🆕 New
IFilteringMigrationSource
to avoid unnecessary instantiations - 🆕 New
IVersionTableMetaDataSourceItem
to specify multiple places to search for version table metadata dotnet-fm
andMigrate.exe
are now referencingFSharp.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 ifIConfiguration
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. Thedotnet-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 registeredIMigrationSourceItem
instances. - 🆕 New
-
v3.0.0 Changes
May 07, 2018📚 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 typeSystem.TimeSpan?
- 🚧
MigrationRunner.MaintenanceLoader
is now read-only MigrationRunner.CaughtExceptions
returns now aIReadOnlyList
dotnet-fm
is now a global tool and requires at least the .NET Core tooling 2.1-preview2
➕ Added
- #851: Enable the usage of Microsoft.Extensions.DependencyInjection
- 🔧 #852: Replace custom configuration mechanisms by using Microsoft.Extensions.Options
- 🌲 #853: Replace the announcer with Microsoft.Extensions.Logging
- 👌 Support for loading connection strings using a provided
IConfiguration
service (Microsoft.Extensions.Configuration) - #822:
IMigrationExpressionValidator
for custom migration expression validation - #809: Ability to add a schema owner during schema creation for SQL Server
🛠 Fixed
- #767: Append
NULL
constraint for custom types for PostgreSQL and SQL Server
🗄 Deprecated
IAssemblyCollection
and all its implementationsIAnnouncer
and all its implementationsIMigrationRunnerConventions.GetMigrationInfo
IProfileLoader.ApplyProfiles()
IProfileLoader.FindProfilesIn
IMigrationProcessorOptions
IMigrationProcessorFactory
and all its implementationsIRunnerContext
andRunnerContext
, replaced by several dedicated options classes:RunnerOptions
are the newRunnerContext
(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 toMicrosoft.Extensions.Configuration
)
CompatabilityMode
(is nowComatibilityMode
)ApplicationContext
in various interfaces/classesManifestResourceNameWithAssembly
replaced byValueTuple
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 a connection string is returned by one of the readers, then this
- When no reader returned a connection string, then return
ProcessorOptions.ConnectionString
The connection string stored in
ProcessorOptions.ConnectionString
might be overridden
by registering theIConnectionStringReader
instancePassThroughConnectionStringReader
as scoped service.When no connection string could be found, the
SelectingProcessorAccessor
returns
aConnectionlessProcessor
instead of the previously selected processor.Instantiating a migration runner
// Initialize the servicesvar serviceProvider = new ServiceCollection() .AddLogging(lb =\> lb.AddFluentMigratorConsole()) .AddFluentMigratorCore() .ConfigureRunner( builder =\> builder .AddSQLite() .WithGlobalConnectionString(connectionString) .WithMigrationsIn(typeof(AddGTDTables).Assembly)) .BuildServiceProvider();// Instantiate the runnervar runner = serviceProvider.GetRequiredService\<IMigrationRunner\>();// Run the migrationsrunner.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. -
v2.0.7 Changes
April 27, 2018➕ Added
- #856 New constructors to enable passing a custom expression convention set
-
v2.0.6 Changes
April 24, 2018🛠 Fixed
- #859: The pound sign is only recognized when it's only preceeded by whitespace
-
v2.0.5 Changes
April 23, 2018➕ 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.
-
v2.0.4 Changes
April 23, 2018Unlisted due to unintentional breaking change.