public static PersistenceMigratorRequest BuildRequest(DbAuthType authType)
        {
            var request = new PersistenceMigratorRequest();

            ConfigureRequest(request, authType);
            return(request);
        }
Beispiel #2
0
        public void Migrate(PersistenceMigratorRequest request, PersistenceMigratorResult result)
        {
            string targetMigration = null;

            string connString = null;

            if (request.PreviousVersion != null)
            {
                result.AddInfoMessage("EF Plugin: Executing rollback");
                connString = request.GetConnectionString();
                using (var ctx = _migratorFactory.CreateDbContext(connString))
                {
                    var repo = _migratorFactory.CreateMigrationRepository(ctx);
                    targetMigration = repo.GetTargetMigration(request.PreviousVersion.Alias);

                    if (repo.EnsureDoesNotExist(request.Version.Alias))
                    {
                        ctx.SaveChanges();
                        result.AddInfoMessage($"EF Plugin: removed '{targetMigration}' from migration mapping history");
                    }
                }
            }

            if (null == targetMigration)
            {
                result.AddInfoMessage("EF Plugin: There were no previous model migrations so nothing needed to rollback.");
            }
            else
            {
                var migrator = _migratorFactory.CreateMigrator(connString);
                migrator.Update(targetMigration);

                result.AddInfoMessage($"EF Plugin: Rolled back schema to migration target '{targetMigration}'");
            }
        }
            public void CallsAction(PersistenceMigratorRequest request)
            {
                var result = CallAction(request);

                Assert.Empty(result.ErrorMessages);
                //Total calls to update
                ExpectedAction.Verify(AnyCallToMigrateExpression, Times.Once);
                //Proper call to update
                ExpectedAction.Verify(m => m.Migrate(request, result), Times.Once);
                //No calls to Rollback
                UnusedAction.Verify(AnyCallToMigrateExpression, Times.Never);
            }
        public static string GetConnectionString(this PersistenceMigratorRequest request)
        {
            var connInfo = request.ConnectionInformation;
            var builder  = new SqlConnectionStringBuilder
            {
                ApplicationName    = $"{request.Application.Alias}-{request.Version.Alias}",
                IntegratedSecurity = connInfo.AuthenticationType == DbAuthType.WindowsAuth,
                InitialCatalog     = connInfo.DatabaseName,
                DataSource         = connInfo.Server
            };

            if (!builder.IntegratedSecurity)
            {
                builder.UserID   = connInfo.Username;
                builder.Password = connInfo.Password;
            }
            return(builder.ConnectionString);
        }
        private PersistenceMigratorResult Migrate(PersistenceMigratorRequest request, IMigrationAction action)
        {
            var result = new PersistenceMigratorResult();

            try
            {
                action.Migrate(request, result);
            }
            catch (Exception e)
            {
#if DEBUG
                result.AddErrorMessage($"EF Plugin: {e.Message}\n{e.StackTrace}");
#else
                result.AddErrorMessage($"EF Plugin: {e.Message}");
#endif
            }

            return(result);
        }
 public static void ConfigureRequest(PersistenceMigratorRequest request, DbAuthType authType)
 {
     request.Application = new NameAlias {
         Alias = AppAlias
     };
     request.Version = new VersionInfo {
         Alias = VerAlias
     };
     request.ConnectionInformation = new ConnectionInformation
     {
         AuthenticationType = authType,
         DatabaseName       = DbName,
         Server             = ServerName,
         Username           = Username,
         Password           = Password,
     };
     request.PreviousVersion = new VersionInfo {
         Alias = PreviousVersion
     };
 }
Beispiel #7
0
        public void Migrate(PersistenceMigratorRequest request, PersistenceMigratorResult result)
        {
            var connString    = request.GetConnectionString();
            var migrator      = _migratorFactory.CreateMigrator(connString);
            var lastMigration = migrator.GetLocalMigrations().OrderByDescending(s => s).FirstOrDefault();

            if (null == lastMigration)
            {
                result.AddInfoMessage("EF Plugin: There were no model changes found so no migrations applied");

                if (request.PreviousVersion != null)
                {
                    //We have to bring the migration forward to the current version, or we won't know what to rollback to.
                    using (var ctx = _migratorFactory.CreateDbContext(connString))
                    {
                        _migratorFactory.CreateMigrationRepository(ctx)
                        .Copy(request.PreviousVersion.Alias, request.Version.Alias);
                        ctx.SaveChanges();
                        result.AddInfoMessage("EF Plugin: Added record to migration mapping history");
                    }
                }
            }
            else
            {
                migrator.Update();

                result.AddInfoMessage($"EF Plugin: Successfully executed EF migration up to '{lastMigration}'");

                using (var ctx = _migratorFactory.CreateDbContext(connString))
                {
                    _migratorFactory.CreateMigrationRepository(ctx)
                    .AddOrUpdate(request.Version.Alias, lastMigration);
                    ctx.SaveChanges();
                }

                result.AddInfoMessage("EF Plugin: Added record to migration mapping history");
            }
        }
 public override PersistenceMigratorResult Rollback(PersistenceMigratorRequest request)
 {
     return(Migrate(request, _rollbackAction));
 }
 public override PersistenceMigratorResult Patch(PersistenceMigratorRequest request)
 {
     return(Migrate(request, _updateAction));
 }
 protected override PersistenceMigratorResult CallAction(PersistenceMigratorRequest request)
 {
     return(GetInstance().Rollback(request));
 }
 protected abstract PersistenceMigratorResult CallAction(PersistenceMigratorRequest request);