Exemplo n.º 1
0
        public static void DropSchemaObjects(DbSettings settings, List <string> schemas, ILog log)
        {
            var driver      = settings.Driver;
            var model       = LoadDbModel(settings, schemas, log);
            var upgradeInfo = new DbUpgradeInfo(null, model);

            foreach (var sch in model.Schemas)
            {
                if (sch.Schema != "dbo") //just for MS SQL, can never drop this
                {
                    upgradeInfo.AddChange(sch, null);
                }
            }
            foreach (var tbl in model.Tables)
            {
                upgradeInfo.AddChange(tbl, null);
                foreach (var refc in tbl.RefConstraints)
                {
                    upgradeInfo.AddChange(refc, null);
                }
                foreach (var key in tbl.Keys)
                {
                    if (key.KeyType.IsSet(KeyType.Index))
                    {
                        upgradeInfo.AddChange(key, null);
                    }
                }
            }
            //  foreach (var custType in model.CustomDbTypes)
            //    upgradeInfo.AddChange(custType, null);
            foreach (var seq in model.Sequences)
            {
                upgradeInfo.AddChange(seq, null);
            }

            var updater = driver.CreateDbModelUpdater(settings);

            updater.BuildScripts(upgradeInfo);
            upgradeInfo.AllScripts.Sort(DbUpgradeScript.CompareExecutionOrder);
            //apply
            var             conn = driver.CreateConnection(settings.SchemaManagementConnectionString);
            IDbCommand      currCmd;
            DbUpgradeScript currScript = null;

            try {
                conn.Open();
                foreach (var script in upgradeInfo.AllScripts)
                {
                    currScript          = script;
                    currCmd             = conn.CreateCommand();
                    currCmd.CommandText = script.Sql;
                    driver.ExecuteCommand(currCmd, DbExecutionType.NonQuery);
                }
            } catch (Exception ex) {
                var logStr = ex.ToLogString();
                System.Diagnostics.Debug.WriteLine(logStr);
                var allScripts = string.Join(Environment.NewLine, upgradeInfo.AllScripts);
                Debug.WriteLine("SCRIPTS: \r\n" + allScripts);
                if (currScript != null)
                {
                    Debug.WriteLine("Failed script: " + currScript);
                }
                throw;
            } finally {
                conn.Close();
            }
        }
Exemplo n.º 2
0
        public static void DropSchemaObjects(DbSettings settings)
        {
            var driver = settings.ModelConfig.Driver;
            var loader = driver.CreateDbModelLoader(settings, null);

            var model       = loader.LoadModel();
            var upgradeInfo = new DbUpgradeInfo(null, model);

            foreach (var sch in model.Schemas)
            {
                if (sch.Schema != "dbo") //just for MS SQL, can never drop this
                {
                    upgradeInfo.AddChange(sch, null);
                }
            }
            foreach (var tbl in model.Tables)
            {
                upgradeInfo.AddChange(tbl, null);
                foreach (var refc in tbl.RefConstraints)
                {
                    upgradeInfo.AddChange(refc, null);
                }
                foreach (var key in tbl.Keys)
                {
                    if (key.KeyType.IsSet(KeyType.Index))
                    {
                        upgradeInfo.AddChange(key, null);
                    }
                }
            }
            //  foreach (var custType in model.CustomDbTypes)
            //    upgradeInfo.AddChange(custType, null);
            foreach (var cmd in model.Commands)
            {
                upgradeInfo.AddChange(cmd, null);
            }
            foreach (var seq in model.Sequences)
            {
                upgradeInfo.AddChange(seq, null);
            }

            var updater = driver.CreateDbModelUpdater(settings);

            updater.BuildScripts(upgradeInfo);
            upgradeInfo.AllScripts.Sort(DbUpgradeScript.CompareExecutionOrder);
            //apply
            var conn = driver.CreateConnection(settings.SchemaManagementConnectionString);

            try {
                conn.Open();
                foreach (var script in upgradeInfo.AllScripts)
                {
                    var cmd = conn.CreateCommand();
                    cmd.CommandText = script.Sql;
                    driver.ExecuteCommand(cmd, DbExecutionType.NonQuery);
                }
            } catch (Exception ex) {
                var logStr = ex.ToLogString();
                System.Diagnostics.Debug.WriteLine(logStr);
                throw;
            } finally {
                conn.Close();
            }
        }