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; } }
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; } } }
public virtual void CreateTables(DbConfiguration dbConfiguration, DatabaseScriptEntry script) { var log = dbConfiguration.sqlLogger(); using (var ctx = dbConfiguration.CreateDbContext()) { ctx.UsingTransaction(() => { CreateTables(log, script, ctx); }); } }
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(); } } }
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; } }
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; } } }
public abstract void CreateDatabase(DbConfiguration dbConfiguration, DatabaseScriptEntry script);
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(); } } }
protected override void CreateTables(ILogger log, DatabaseScriptEntry script, IDbContext ctx) { script.SchemaScripts = null; base.CreateTables(log, script, ctx); }
/// <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); }
protected override void CreateTables(ISqlLog log, DatabaseScriptEntry script, IDbContext ctx) { script.SchemaScripts = null; base.CreateTables(log, script, ctx); }
/// <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; }