public static PersistenceMigratorRequest BuildRequest(DbAuthType authType) { var request = new PersistenceMigratorRequest(); ConfigureRequest(request, authType); return(request); }
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 }; }
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);