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());
        }
Beispiel #4
0
 public MigrationScheme Clone()
 {
     return(MigrationScheme.Deserialize(this.Serialize()));
 }