diff --git a/src/Migrator.Tests/Data/TestMigrations.cs b/src/Migrator.Tests/Data/TestMigrations.cs index 1413c9c9..a6541559 100644 --- a/src/Migrator.Tests/Data/TestMigrations.cs +++ b/src/Migrator.Tests/Data/TestMigrations.cs @@ -63,4 +63,4 @@ public virtual void AfterDown() public virtual void InitializeOnce(string[] args) { } -} \ No newline at end of file +} diff --git a/src/Migrator/MigrateAnywhere.cs b/src/Migrator/MigrateAnywhere.cs index b75bf099..2c374902 100644 --- a/src/Migrator/MigrateAnywhere.cs +++ b/src/Migrator/MigrateAnywhere.cs @@ -1,8 +1,8 @@ using System; using System.Collections.Generic; -using System.Reflection; using DotNetProjects.Migrator.Framework; using DotNetProjects.Migrator.Providers; +using DotNetProjects.Migrator.Providers.Impl.SQLite; namespace DotNetProjects.Migrator; @@ -63,13 +63,22 @@ public override bool Continue(long version) public override void Migrate(IMigration migration) { - _provider.BeginTransaction(); #if NETSTANDARD var attr = migration.GetType().GetTypeInfo().GetCustomAttribute(); #else var attr = (MigrationAttribute)Attribute.GetCustomAttribute(migration.GetType(), typeof(MigrationAttribute)); -#endif - +#endif + var foreignKeysWasOn = false; + if (_provider is SQLiteTransformationProvider sqlite) + { + foreignKeysWasOn = sqlite.IsPragmaForeignKeysOn(); + if (foreignKeysWasOn) + { + sqlite.SetPragmaForeignKeys(false); + } + } + + _provider.BeginTransaction(); if (_provider.AppliedMigrations.Contains(attr.Version)) { @@ -78,6 +87,11 @@ public override void Migrate(IMigration migration) else { ApplyMigration(migration, attr); + } + + if (foreignKeysWasOn && _provider is SQLiteTransformationProvider sqlite2) + { + sqlite2.SetPragmaForeignKeys(true); } }