public MigrationScheme GetPreviousScheme() { if (File.Exists(PreviousSnapshotFileName)) { var previous_snapshot_string = File.ReadAllText(PreviousSnapshotFileName); return(MigrationScheme.Deserialize(previous_snapshot_string)); } else { return(new MigrationScheme()); // empty configuration } }
public IEnumerable <Migration> CompareScheme(MigrationScheme previous, MigrationScheme current) { // detect new tables foreach (var table in current.Tables) { if (!previous.HasTable(table.Name)) { yield return(new CreateTableMigration(table)); } else // table still exists { var previous_table = previous[table.Name]; foreach (var column in table.Columns) { var previous_column = previous_table.Columns.FirstOrDefault(c => c.Name == column.Name); if (previous_column == null) //detect new columns { yield return(new CreateColumnMigration(column)); } else { // column alteration if (!previous_column.IsSimilarTo(column)) { yield return(new AlterColumnMigration(previous_column, column)); } } } // delect deleted columns foreach (var previous_column in previous_table.Columns) { var column = table.Columns.FirstOrDefault(c => c.Name == previous_column.Name); if (column == null) { // column was deleted yield return(new DeleteColumnMigration(previous_column)); } } } } // detect droped tables foreach (var table in previous.Tables) { if (!current.HasTable(table.Name)) { yield return(new DropTableMigration(table)); } } }
public MigrationGenerator(NHibernate.Cfg.Configuration configuration, Encoding encoding) { this.Encoding = encoding; Configuration = configuration; Configuration.BuildMappings(); // necessary to complete columns creation (foreign keys...) var mapping = Configuration.CreateMappings(new GenericDialect()); // extract the tables scheme CurrentScheme = new MigrationScheme(mapping.IterateTables.Select(t => new MigrationTable(t))); UpdateForeignKeys(); PreviousSnapshotFileName = string.Format("{0}\\previous.snapshot", Directory.GetCurrentDirectory()); }
public MigrationScheme Clone() { return(MigrationScheme.Deserialize(this.Serialize())); }