public override void CreateDatabase(DbConfiguration dbConfiguration, DatabaseScriptEntry script)
        {
            var dbName = dbConfiguration.DatabaseName;

            if (File.Exists(dbName))
            {
                throw new InvalidOperationException(string.Format("Unable to create database because the database '{0}' already exists.", dbName));
            }

            OnCreateDatabase(dbConfiguration, dbName);

            try
            {
                CreateTables(dbConfiguration, script);
            }
            catch
            {
                try
                {
                    DeleteDatabase(dbConfiguration);
                }
                catch { }
                throw;
            }
        }
Пример #2
0
        public override void CreateDatabase(DbConfiguration dbConfiguration, DatabaseScriptEntry script)
        {
            var connectionStringBuilder = dbConfiguration.DbProviderFactory.CreateConnectionStringBuilder();

            connectionStringBuilder.ConnectionString = dbConfiguration.ConnectionString;

            var dbName         = GetDatabaseName(connectionStringBuilder);
            var dbPassword     = GetPWD(connectionStringBuilder);
            var createDatabase = "CREATE USER " + dbName + " IDENTIFIED BY " + dbPassword;

            var systemUser = "******";

            dbConfiguration.sqlLogger().LogMessage(createDatabase);
            connectionStringBuilder["USER ID"]  = systemUser;
            connectionStringBuilder["Password"] = dbPassword;

            var log = dbConfiguration.sqlLogger();

            using (var ctx = dbConfiguration.CreateDbContext())
            {
                var conn = ctx.Connection;
                conn.ConnectionString = connectionStringBuilder.ConnectionString;

                var cmd = conn.CreateCommand();
                cmd.CommandText = createDatabase;
                conn.Open();
                cmd.ExecuteNonQuery();
                cmd.CommandText = "GRANT CONNECT,RESOURCE  TO " + dbName;
                cmd.ExecuteNonQuery();
                //conn.ChangeDatabase(dbName);
                conn.Close();
            }
            connectionStringBuilder["USER ID"]  = dbName;
            connectionStringBuilder["Password"] = dbPassword;

            using (var ctx = dbConfiguration.CreateDbContext())
            {
                var conn = ctx.Connection;
                conn.ConnectionString = connectionStringBuilder.ConnectionString;
                conn.Open();
                try
                {
                    ctx.UsingTransaction(() => CreateTables(log, script, ctx));
                }
                catch
                {
                    conn.Close();
                    connectionStringBuilder["USER ID"] = systemUser;
                    conn.ConnectionString = connectionStringBuilder.ConnectionString;
                    conn.Open();

                    var cmd = conn.CreateCommand();
                    cmd.CommandText = "Drop USER " + dbName + " CASCADE";
                    cmd.ExecuteNonQuery();

                    throw;
                }
            }
        }
Пример #3
0
        public override void CreateDatabase(DbConfiguration dbConfiguration, DatabaseScriptEntry script)
        {
            var connectionStringBuilder = dbConfiguration.DbProviderFactory.CreateConnectionStringBuilder();
            connectionStringBuilder.ConnectionString = dbConfiguration.ConnectionString;

            var dbName = GetDatabaseName(connectionStringBuilder);
            var dbPassword = GetPWD(connectionStringBuilder);
            var createDatabase = "CREATE USER " + dbName + " IDENTIFIED BY " + dbPassword;

            var systemUser = "******";
            dbConfiguration.sqlLogger().LogMessage(createDatabase);
            connectionStringBuilder["USER ID"] = systemUser;
            connectionStringBuilder["Password"] = dbPassword;

            var log = dbConfiguration.sqlLogger();
            using (var ctx = dbConfiguration.CreateDbContext())
            {
                var conn = ctx.Connection;
                conn.ConnectionString = connectionStringBuilder.ConnectionString;

                var cmd = conn.CreateCommand();
                cmd.CommandText = createDatabase;
                conn.Open();
                cmd.ExecuteNonQuery();
                cmd.CommandText = "GRANT CONNECT,RESOURCE  TO " + dbName;
                cmd.ExecuteNonQuery();
                //conn.ChangeDatabase(dbName);
                conn.Close();

            }
            connectionStringBuilder["USER ID"] = dbName;
            connectionStringBuilder["Password"] = dbPassword;

            using (var ctx = dbConfiguration.CreateDbContext())
            {
                var conn = ctx.Connection;
                conn.ConnectionString = connectionStringBuilder.ConnectionString;
                conn.Open();
                try
                {
                    ctx.UsingTransaction(() => CreateTables(log, script, ctx));
                }
                catch
                {
                    conn.Close();
                    connectionStringBuilder["USER ID"] = systemUser;
                    conn.ConnectionString = connectionStringBuilder.ConnectionString;
                    conn.Open();

                    var cmd = conn.CreateCommand();
                    cmd.CommandText = "Drop USER " + dbName + " CASCADE";
                    cmd.ExecuteNonQuery();

                    throw;
                }
            }
        }
Пример #4
0
        public virtual void CreateTables(DbConfiguration dbConfiguration, DatabaseScriptEntry script)
        {
            var log = dbConfiguration.sqlLogger();
            using (var ctx = dbConfiguration.CreateDbContext())
            {
                ctx.UsingTransaction(() =>
                {
                    CreateTables(log, script, ctx);
                });

            }
        }
Пример #5
0
        public virtual void CreateTables(DbConfiguration dbConfiguration, DatabaseScriptEntry script)
        {
            var log = dbConfiguration.sqlLogger();

            using (var ctx = dbConfiguration.CreateDbContext())
            {
                ctx.UsingTransaction(() =>
                {
                    CreateTables(log, script, ctx);
                });
            }
        }
Пример #6
0
        public override void CreateDatabase(DbConfiguration dbConfiguration, DatabaseScriptEntry script)
        {
            var connectionStringBuilder = dbConfiguration.DbProviderFactory.CreateConnectionStringBuilder();

            connectionStringBuilder.ConnectionString = dbConfiguration.ConnectionString;

            var dbName         = dbConfiguration.DatabaseName;
            var createDatabase = "CREATE DATABASE " + dbName;

            dbConfiguration.sqlLogger().LogMessage(createDatabase);
            connectionStringBuilder["Database"] = "master";

            var log = dbConfiguration.sqlLogger();

            using (var ctx = dbConfiguration.CreateDbContext())
            {
                var conn = ctx.Connection;
                conn.ConnectionString = connectionStringBuilder.ConnectionString;

                var cmd = conn.CreateCommand();
                cmd.CommandText = createDatabase;
                conn.Open();
                cmd.ExecuteNonQuery();
                conn.ChangeDatabase(dbName);
                try
                {
                    ctx.UsingTransaction(() => CreateTables(log, script, ctx));
                }
                catch
                {
                    conn.ChangeDatabase("master");
                    cmd.CommandText = string.Format(DropDatabaseScriptTemplate, dbName);
                    cmd.ExecuteNonQuery();
                    throw;
                }
                finally
                {
                    conn.Close();
                }
            }
        }
Пример #7
0
        public override void CreateDatabase(DbConfiguration dbConfiguration, DatabaseScriptEntry script)
        {
            var dbName = dbConfiguration.DatabaseName;
            if (File.Exists(dbName))
                throw new InvalidOperationException(string.Format("Unable to create database because the database '{0}' already exists.", dbName));

            OnCreateDatabase(dbConfiguration, dbName);

            try
            {
                CreateTables(dbConfiguration, script);
            }
            catch
            {
                try
                {
                    DeleteDatabase(dbConfiguration);
                }
                catch { }
                throw;
            }
        }
Пример #8
0
        public override void CreateDatabase(DbConfiguration dbConfiguration, DatabaseScriptEntry script)
        {
            var connectionStringBuilder = dbConfiguration.DbProviderFactory.CreateConnectionStringBuilder();
            connectionStringBuilder.ConnectionString = dbConfiguration.ConnectionString;

            var dbName = dbConfiguration.DatabaseName;
            var createDatabase = "CREATE DATABASE " + dbName;
            dbConfiguration.sqlLogger().LogMessage(createDatabase);
            connectionStringBuilder["Database"] = "mysql";

            var log = dbConfiguration.sqlLogger();

            using (var ctx = dbConfiguration.CreateDbContext())
            {
                var conn = ctx.Connection;
                conn.ConnectionString = connectionStringBuilder.ConnectionString;

                var cmd = conn.CreateCommand();
                cmd.CommandText = createDatabase;
                conn.Open();
                cmd.ExecuteNonQuery();
                conn.ChangeDatabase(dbName);
                try
                {
                    ctx.UsingTransaction(() =>
                    {
                        CreateTables(log, script, ctx);

                    });
                }
                catch
                {
                    conn.ChangeDatabase("mysql");
                    cmd.CommandText = string.Format("Drop DataBase {0}", dbName);
                    cmd.ExecuteNonQuery();
                    throw;
                }
            }
        }
Пример #9
0
 public abstract void CreateDatabase(DbConfiguration dbConfiguration, DatabaseScriptEntry script);
Пример #10
0
        protected virtual void CreateTables(ISqlLog log, DatabaseScriptEntry script, IDbContext ctx)
        {
            var cmd = ctx.Connection.CreateCommand();

            if (script.SequenceScripts != null && script.SequenceScripts.Length > 0)
            {
                foreach (var item in script.SequenceScripts)
                {
                    cmd.CommandText = item;
                    log.LogMessage(item);
                    cmd.ExecuteNonQuery();
                }
            }

            if (script.SchemaScripts != null && script.SchemaScripts.Length > 0)
            {
                foreach (var item in script.SchemaScripts)
                {
                    cmd.CommandText = item;
                    log.LogMessage(item);
                    cmd.ExecuteNonQuery();
                }
            }

            if (script.TableScripts != null && script.TableScripts.Length > 0)
            {
                foreach (var item in script.TableScripts)
                {
                    cmd.CommandText = item;
                    log.LogMessage(item);
                    cmd.ExecuteNonQuery();

                }
            }

            if (script.PKConstraintScripts != null && script.PKConstraintScripts.Length > 0)
            {
                foreach (var item in script.PKConstraintScripts)
                {
                    cmd.CommandText = item;
                    log.LogMessage(item);
                    cmd.ExecuteNonQuery();
                }
            }

            if (script.FKConstraintScripts != null && script.FKConstraintScripts.Length > 0)
            {
                foreach (var item in script.FKConstraintScripts)
                {
                    cmd.CommandText = item;
                    log.LogMessage(item);
                    cmd.ExecuteNonQuery();
                }
            }

            if (script.UniquleConstraintScripts != null && script.UniquleConstraintScripts.Length > 0)
            {
                foreach (var item in script.UniquleConstraintScripts)
                {
                    cmd.CommandText = item;
                    log.LogMessage(item);
                    cmd.ExecuteNonQuery();
                }
            }

            if (script.CheckConstraintScript != null && script.CheckConstraintScript.Length > 0)
            {
                foreach (var item in script.CheckConstraintScript)
                {
                    cmd.CommandText = item;
                    log.LogMessage(item);
                    cmd.ExecuteNonQuery();
                }
            }
        }
Пример #11
0
 protected override void CreateTables(ILogger log, DatabaseScriptEntry script, IDbContext ctx)
 {
     script.SchemaScripts = null;
     base.CreateTables(log, script, ctx);
 }
Пример #12
0
        /// <summary>
        /// 生成数据库脚本
        /// </summary>
        /// <param name="dialect">数据库方言</param>
        /// <param name="mappings">映射元数据</param>
        /// <param name="dbName">数据库名称</param>
        /// <returns>返回数据库脚本</returns>
        public DatabaseScriptEntry Build(IDialect dialect, Mapping.IEntityMapping[] mappings, string databaseName)
        {
            Guard.NotNull(dialect, "dialect");
            Guard.NotNull(mappings, "mappings");
            if (mappings.Length == 0)
            {
                throw new ArgumentNullException("mappings");
            }
            this.Dialect = dialect;
            var Mappings = mappings;

            DatabaseName = databaseName;

            Entry = new DatabaseScriptEntry();

            BuildDatabaseScript(databaseName);

            if (dialect.SupportSchema)
            {
                Entry.SchemaScripts = BuildSchemaScript(mappings)
                                      .Where(p => p.HasValue())
                                      .ToArray();
            }

            var sequanceScript = BuildAllSequanceScripts(Mappings)
                                 .Where(p => p.HasValue())
                                 .ToArray();


            var pkScript = Mappings
                           .Where(p => p.PrimaryKeys.Length > 0)
                           .Select(p => BuildPKScript(p.PrimaryKeys))
                           .Where(p => p.HasValue())
                           .ToArray();

            var checkScript = Mappings.Where(p => p.Members.Any(m => m.IsCheck))
                              .SelectMany(p => p.Members.Where(m => m.IsCheck))
                              .Select(p => BuildCheckConstraintScript(p))
                              .Where(p => p.HasValue())
                              .ToArray();

            var fkScript = Mappings.Where(p => p.Members.Any(m => m.IsManyToOne))
                           .SelectMany(p => p.Members.Where(m => m.IsManyToOne))
                           .Select(p => BuildFKScript(p))
                           .Where(p => p.HasValue())
                           .ToArray();

            var uniquleScript = Mappings.Where(p => p.Members.Any(m => m.IsUniqule))
                                .SelectMany(p => p.Members.Where(m => m.IsUniqule))
                                .Select(p => BuildUniquleConstraintScript(p))
                                .Where(p => p.HasValue())
                                .ToArray();

            if (Dialect.SupportMultipleCommands)
            {
                Entry.TableScripts = new string[]
                {
                    Mappings.Select(p => BuildTableScript(p)).ToCSV(";")
                };
                if (pkScript.Length > 0)
                {
                    Entry.PKConstraintScripts = new string[] { pkScript.ToCSV(";") }
                }
                ;

                if (fkScript.Length > 0)
                {
                    Entry.FKConstraintScripts = new string[] { fkScript.ToCSV(";") }
                }
                ;


                if (checkScript.Length > 0)
                {
                    Entry.CheckConstraintScript = new string[] { checkScript.ToCSV(";") }
                }
                ;

                if (uniquleScript.Length > 0)
                {
                    Entry.UniquleConstraintScripts = new string[] { uniquleScript.ToCSV(";") }
                }
                ;

                if (sequanceScript.Length > 0)
                {
                    Entry.SequenceScripts = new string[] { sequanceScript.ToCSV(";") }
                }
                ;
            }
            else
            {
                Entry.TableScripts             = Mappings.Select(p => BuildTableScript(p)).ToArray();
                Entry.PKConstraintScripts      = pkScript;
                Entry.FKConstraintScripts      = fkScript;
                Entry.CheckConstraintScript    = checkScript;
                Entry.UniquleConstraintScripts = uniquleScript;
                Entry.SequenceScripts          = sequanceScript;
            }

            return(Entry);
        }
Пример #13
0
 protected override void CreateTables(ISqlLog log, DatabaseScriptEntry script, IDbContext ctx)
 {
     script.SchemaScripts = null;
     base.CreateTables(log, script, ctx);
 }
Пример #14
0
 public abstract void CreateDatabase(DbConfiguration dbConfiguration, DatabaseScriptEntry script);
Пример #15
0
        protected virtual void CreateTables(ISqlLog log, DatabaseScriptEntry script, IDbContext ctx)
        {
            var cmd = ctx.Connection.CreateCommand();

            if (script.SequenceScripts != null && script.SequenceScripts.Length > 0)
            {
                foreach (var item in script.SequenceScripts)
                {
                    cmd.CommandText = item;
                    log.LogMessage(item);
                    cmd.ExecuteNonQuery();
                }
            }

            if (script.SchemaScripts != null && script.SchemaScripts.Length > 0)
            {
                foreach (var item in script.SchemaScripts)
                {
                    cmd.CommandText = item;
                    log.LogMessage(item);
                    cmd.ExecuteNonQuery();
                }
            }

            if (script.TableScripts != null && script.TableScripts.Length > 0)
            {
                foreach (var item in script.TableScripts)
                {
                    cmd.CommandText = item;
                    log.LogMessage(item);
                    cmd.ExecuteNonQuery();
                }
            }

            if (script.PKConstraintScripts != null && script.PKConstraintScripts.Length > 0)
            {
                foreach (var item in script.PKConstraintScripts)
                {
                    cmd.CommandText = item;
                    log.LogMessage(item);
                    cmd.ExecuteNonQuery();
                }
            }

            if (script.FKConstraintScripts != null && script.FKConstraintScripts.Length > 0)
            {
                foreach (var item in script.FKConstraintScripts)
                {
                    cmd.CommandText = item;
                    log.LogMessage(item);
                    cmd.ExecuteNonQuery();
                }
            }

            if (script.UniquleConstraintScripts != null && script.UniquleConstraintScripts.Length > 0)
            {
                foreach (var item in script.UniquleConstraintScripts)
                {
                    cmd.CommandText = item;
                    log.LogMessage(item);
                    cmd.ExecuteNonQuery();
                }
            }

            if (script.CheckConstraintScript != null && script.CheckConstraintScript.Length > 0)
            {
                foreach (var item in script.CheckConstraintScript)
                {
                    cmd.CommandText = item;
                    log.LogMessage(item);
                    cmd.ExecuteNonQuery();
                }
            }
        }
Пример #16
0
        /// <summary>
        /// 生成数据库脚本
        /// </summary>
        /// <param name="dialect">数据库方言</param>
        /// <param name="mappings">映射元数据</param>
        /// <param name="dbName">数据库名称</param>
        /// <returns>返回数据库脚本</returns>
        public DatabaseScriptEntry Build(IDialect dialect, Mapping.IEntityMapping[] mappings,string databaseName)
        {
            Guard.NotNull(dialect, "dialect");
            Guard.NotNull(mappings, "mappings");
            if (mappings.Length == 0)
                throw new ArgumentNullException("mappings");
            this.Dialect = dialect;
            var Mappings = mappings;
            DatabaseName = databaseName;

            Entry = new DatabaseScriptEntry();

            BuildDatabaseScript(databaseName);

            if (dialect.SupportSchema)
                Entry.SchemaScripts = BuildSchemaScript(mappings)
                     .Where(p => p.HasValue())
                     .ToArray();

            var sequanceScript = BuildAllSequanceScripts(Mappings)
                .Where(p => p.HasValue())
                     .ToArray();

            var pkScript = Mappings
                        .Where(p => p.PrimaryKeys.Length > 0)
                        .Select(p => BuildPKScript(p.PrimaryKeys))
                        .Where(p => p.HasValue())
                        .ToArray();

            var checkScript = Mappings.Where(p => p.Members.Any(m => m.IsCheck))
                    .SelectMany(p => p.Members.Where(m => m.IsCheck))
                    .Select(p => BuildCheckConstraintScript(p))
                    .Where(p => p.HasValue())
                    .ToArray();

            var fkScript = Mappings.Where(p => p.Members.Any(m => m.IsManyToOne))
                    .SelectMany(p => p.Members.Where(m => m.IsManyToOne))
                    .Select(p => BuildFKScript(p))
                    .Where(p => p.HasValue())
                    .ToArray();

            var uniquleScript= Mappings.Where(p => p.Members.Any(m => m.IsUniqule))
                    .SelectMany(p => p.Members.Where(m => m.IsUniqule))
                    .Select(p => BuildUniquleConstraintScript(p))
                    .Where(p => p.HasValue())
                    .ToArray();

            if (Dialect.SupportMultipleCommands)
            {
                Entry.TableScripts = new string[]
                {
                   Mappings.Select(p=>BuildTableScript(p)).ToCSV(";")
                };
                if (pkScript.Length > 0)
                    Entry.PKConstraintScripts = new string[] { pkScript.ToCSV(";") };

                if (fkScript.Length > 0)
                    Entry.FKConstraintScripts = new string[] { fkScript.ToCSV(";") };

                if (checkScript.Length > 0)
                    Entry.CheckConstraintScript = new string[] { checkScript.ToCSV(";") };

                if (uniquleScript.Length > 0)
                    Entry.UniquleConstraintScripts = new string[] { uniquleScript.ToCSV(";") };

                if (sequanceScript.Length > 0)
                    Entry.SequenceScripts = new string[] { sequanceScript.ToCSV(";")};
            }
            else
            {
                Entry.TableScripts = Mappings.Select(p => BuildTableScript(p)).ToArray();
                Entry.PKConstraintScripts = pkScript;
                Entry.FKConstraintScripts = fkScript;
                Entry.CheckConstraintScript = checkScript;
                Entry.UniquleConstraintScripts = uniquleScript;
                Entry.SequenceScripts = sequanceScript;
            }

            return Entry;
        }