public virtual bool IsSimilarTo(MigrationColumn column)
        {
            if (column.GetType() != this.GetType())
            {
                return(false);
            }

            if (column.Name != this.Name)
            {
                return(false);
            }

            if (column.Type != this.Type)
            {
                return(false);
            }

            if (column.IsNullable != this.IsNullable)
            {
                return(false);
            }

            if (column.IsPrimaryKey != this.IsPrimaryKey)
            {
                return(false);
            }

            return(true);
        }
        public override bool IsSimilarTo(MigrationColumn column)
        {
            var result = base.IsSimilarTo(column);

            if (!result)
            {
                return(false);
            }

            var dc = column as DecimalMigrationColumn;

            if (dc == null)
            {
                return(false);
            }

            if (dc.Precision != this.Precision)
            {
                return(false);
            }

            if (dc.Scale != this.Scale)
            {
                return(false);
            }

            return(true);
        }
        public virtual bool IsSimilarTo(MigrationColumn column)
        {
            if (column.GetType() != this.GetType())
                return false;

            if (column.Name != this.Name)
                return false;

            if (column.Type != this.Type)
                return false;

            if (column.IsNullable != this.IsNullable)
                return false;

            if (column.IsPrimaryKey != this.IsPrimaryKey)
                return false;

            return true;
        }
        public override bool IsSimilarTo(MigrationColumn column)
        {
            var result = base.IsSimilarTo(column);

            if (!result)
            {
                return(false);
            }

            var fk = column as ForeignKeyColumn;

            if (fk == null)
            {
                return(false);
            }

            if (fk.ReferencedTableName != this.ReferencedTableName)
            {
                return(false);
            }

            return(true);
        }
        public override bool IsSimilarTo(MigrationColumn column)
        {
            var result = base.IsSimilarTo(column);

            if (!result)
            {
                return(false);
            }

            var sc = column as StringMigrationColumn;

            if (sc == null)
            {
                return(false);
            }

            if (sc.Length != this.Length)
            {
                return(false);
            }


            return(true);
        }
        public override bool IsSimilarTo(MigrationColumn column)
        {
            var result = base.IsSimilarTo(column);

            if (!result)
                return false;

            var sc = column as StringMigrationColumn;

            if (sc == null)
                return false;

            if (sc.Length != this.Length)
                return false;


            return true;
        }
        public override bool IsSimilarTo(MigrationColumn column)
        {
            var result = base.IsSimilarTo(column);

            if (!result)
                return false;

            var dc = column as DecimalMigrationColumn;

            if (dc == null)
                return false;

            if (dc.Precision != this.Precision)
                return false;

            if (dc.Scale != this.Scale)
                return false;

            return true;
        }
        public override bool IsSimilarTo(MigrationColumn column)
        {
            var result = base.IsSimilarTo(column);
            
            if (!result)
                return false;

            var fk = column as ForeignKeyColumn;
            
            if (fk == null)
                return false;

            if (fk.ReferencedTableName != this.ReferencedTableName)
                return false;

            return true;
        }