Beispiel #1
0
        public string Compare()
        {
            TableSchema schema1 = new TableSchema(tableName1);
            TableSchema schema2 = new TableSchema(tableName2);

            StringBuilder builder = new StringBuilder();
            TableClause script = new TableClause(schema1);

            foreach (ColumnSchema column in schema1.Columns)
            {
                if (schema2.Columns.Where(c => c.ColumnName == column.ColumnName).Count() == 0)
                {
                    builder.AppendLine(script.ADD_COLUMN(column));
                }
                else if (schema2.Columns.Where(c =>
                    c.ColumnName.Equals(column.ColumnName)
                    && (c.CType != column.CType
                    || c.Nullable != column.Nullable
                    || c.Precision != column.Precision
                    || c.Scale != column.Scale
                    || c.IsIdentity != column.IsIdentity
                    || c.IsComputed != column.IsComputed
                    ))
                    .Count() != 0)
                {
                    builder.AppendLine(script.ALTER_COLUMN(column));
                }
            }

            var pk1 = schema1.PrimaryKeys;
            var pk2 = schema2.PrimaryKeys;

            if (pk2.Keys.Length == 0)
            {
                if (pk1.Keys.Length > 0)
                {
                    builder.AppendLine(script.ADD_PRIMARY_KEY(pk1));
                    builder.AppendLine(TableClause.GO);
                }
            }
            else
            {
                if (pk1.Keys.Length > 0 && !Equals(pk1.Keys, pk2.Keys))
                {
                    builder.AppendLine(script.DROP_PRIMARY_KEY(pk1));
                    builder.AppendLine(script.ADD_PRIMARY_KEY(pk1));
                    builder.AppendLine(TableClause.GO);
                }
            }

            var fk1 = schema1.ForeignKeys;
            var fk2 = schema2.ForeignKeys;

            if (fk2.Keys.Length == 0)
            {
                if (fk1.Keys.Length > 0)
                {
                    foreach (var fk in fk1.Keys)
                    {
                        builder.AppendLine(script.ADD_FOREIGN_KEY(fk)).AppendLine(TableClause.GO);
                    }
                }
            }
            else
            {
                if (fk1.Keys.Length > 0)
                {
                    foreach (var k1 in fk1.Keys)
                    {
                        if (fk2.Keys.Where(k2 => k2.Constraint_Name.Equals(k1.Constraint_Name)).Count() == 0)
                        {
                            builder.AppendLine(script.DROP_FOREIGN_KEY(k1)).AppendLine(TableClause.GO);
                            builder.AppendLine(script.ADD_FOREIGN_KEY(k1)).AppendLine(TableClause.GO);
                        }
                    }
                }
            }

            return builder.ToString();
        }
Beispiel #2
0
        public string Compare()
        {
            TableSchema schema1 = new TableSchema(tableName1);
            TableSchema schema2 = new TableSchema(tableName2);

            StringBuilder builder = new StringBuilder();
            TableClause   script  = new TableClause(schema2);

            foreach (ColumnSchema column in schema1.Columns)
            {
                if (schema2.Columns.Where(c => IgnoreCaseEquals(c.ColumnName, column.ColumnName)).Count() == 0)
                {
                    builder.AppendLine(script.ADD_COLUMN(column));
                }
                else if (schema2.Columns.Where(c => ColumnNotEqual(c, column)).Count() != 0)
                {
                    builder.AppendLine(script.ALTER_COLUMN(column));
                }
            }

            var pk1 = schema1.PrimaryKeys;
            var pk2 = schema2.PrimaryKeys;

            if (pk2.Keys.Length == 0)
            {
                if (pk1.Keys.Length > 0)
                {
                    builder.AppendLine(script.ADD_PRIMARY_KEY(pk1));
                    builder.AppendLine(SqlScript.GO);
                }
            }
            else
            {
                if (pk1.Keys.Length > 0 && !Equals(pk1.Keys, pk2.Keys))
                {
                    builder.AppendLine(script.DROP_PRIMARY_KEY(pk1));
                    builder.AppendLine(script.ADD_PRIMARY_KEY(pk1));
                    builder.AppendLine(SqlScript.GO);
                }
            }

            var fk1 = schema1.ForeignKeys;
            var fk2 = schema2.ForeignKeys;

            if (fk2.Keys.Length == 0)
            {
                if (fk1.Keys.Length > 0)
                {
                    foreach (var fk in fk1.Keys)
                    {
                        builder.AppendLine(script.ADD_FOREIGN_KEY(fk)).AppendLine(SqlScript.GO);
                    }
                }
            }
            else
            {
                if (fk1.Keys.Length > 0)
                {
                    foreach (var k1 in fk1.Keys)
                    {
                        if (fk2.Keys.Where(k2 => k2.Constraint_Name.Equals(k1.Constraint_Name)).Count() == 0)
                        {
                            builder.AppendLine(script.DROP_FOREIGN_KEY(k1)).AppendLine(SqlScript.GO);
                            builder.AppendLine(script.ADD_FOREIGN_KEY(k1)).AppendLine(SqlScript.GO);
                        }
                    }
                }
            }


            return(builder.ToString());
        }