public void Migrate_NoDiagnosticsAndThrows_Rollsback()
        {
            _steps[string.Empty][0].DatabaseMigration = _migration1;
            _steps[string.Empty][1].DatabaseMigration = _migration2;
            using (_mocks.Record())
            {
                Expect.Call(_transactionProvider.Begin()).Return(_transaction);
                _migration1.Up();
                _schemaStateManager.SetMigrationVersionApplied(1, null);
                _transaction.Commit();
                Expect.Call(_transactionProvider.Begin()).Return(_transaction);
                _migration2.Up();
                LastCall.Throw(new ArgumentException());
                _transaction.Rollback();
            }
            bool caught = false;

            try
            {
                _target.Migrate(_steps);
            }
            catch (ArgumentException)
            {
                caught = true;
            }
            Assert.IsTrue(caught);
            _mocks.VerifyAll();
        }
Пример #2
0
 public void Migrate(IDictionary <string, List <MigrationStep> > steps)
 {
     foreach (MigrationStep step in steps.SelectMany(row => row.Value).OrderBy(row => row.Version))
     {
         _log.Info(step);
         using (Machine.Core.LoggingUtilities.Log4NetNdc.Push("{0}", step.MigrationReference.Name))
         {
             _configuration.ActiveConfigurationKey = step.MigrationReference.ConfigurationKey;
             if (!_configuration.ShowDiagnostics)
             {
                 IDbTransaction transaction = null;
                 try
                 {
                     transaction = _transactionProvider.Begin();
                     step.Apply();
                     if (step.Reverting)
                     {
                         _schemaStateManager.SetMigrationVersionUnapplied(step.Version, _configuration.Scope);
                     }
                     else
                     {
                         _schemaStateManager.SetMigrationVersionApplied(step.Version, _configuration.Scope);
                     }
                     _log.InfoFormat("Comitting");
                     transaction.Commit();
                 }
                 catch (Exception)
                 {
                     if (transaction != null)
                     {
                         _log.InfoFormat("Rollback");
                         transaction.Rollback();
                     }
                     throw;
                 }
                 finally
                 {
                     _configuration.ActiveConfigurationKey = null;
                 }
             }
         }
     }
 }