Example #1
0
        public void CreateSchema(List <TableSchema> schema)
        {
            ExecuteTask(() =>
            {
                List <TableSchema> alters = new List <TableSchema>();
                foreach (TableSchema table in schema)
                {
                    if (!IsTableExists(table.Name))
                    {
                        StringBuilder query = new StringBuilder();
                        query.Append("CREATE TABLE " + table.Name + " ( \n");
                        foreach (TableSchema.ColumnSchema column in table.Columns)
                        {
                            query.Append(column.Name);
                            query.Append(" " + DatatypeResolver.Resolve(column.ColType));
                            if ((column.Length != null) && (column.Length > 0))
                            {
                                query.Append("(" + column.Length);
                                if ((column.FractionalPartLength != null) && (column.FractionalPartLength > 0))
                                {
                                    query.Append(", " + column.FractionalPartLength);
                                }
                                query.Append(")");
                            }
                            else
                            {
                                query.Append(Converter.EnumToDefaultString(column.ColType));
                            }
                            if (!column.AllowNull)
                            {
                                query.Append(" NOT NULL");
                            }
                            if (column.IsPrimaryKey)
                            {
                                query.Append(" PRIMARY KEY");
                            }
                            query.Append(",\n");
                            if (column.HasForeignKey && !alters.Contains(table))
                            {
                                alters.Add(table);
                            }
                        }
                        query.Append(")\n");
                        TransactionExtensions.WriteDiagnostics(query.ToString());
                        SqlCommand command = new SqlCommand(query.ToString(), connection);
                        command.ExecuteNonQuery();
                    }
                }

                foreach (TableSchema table in alters)
                {
                    foreach (TableSchema.ColumnSchema column in table.Columns)
                    {
                        if (column.HasForeignKey)
                        {
                            string alterquery = "ALTER TABLE " + table.Name + " \nADD FOREIGN KEY (" + column.Name + ") \nREFERENCES " + column.ForeignTableName + "(" + column.ForeignKeyName + ")\n";
                            TransactionExtensions.WriteDiagnostics(alterquery);
                            SqlCommand command = new SqlCommand(alterquery, connection);
                            command.ExecuteNonQuery();
                        }
                    }
                }
                return(true);
            });
        }