示例#1
0
 public void LoadDacpac()
 {
     Dacpac = DacPackage.Load(DacpacPath);
 }
示例#2
0
        public void DeployDacPac(string databaseName)
        {
            ProviderConfiguration config =
                (ProviderConfiguration)ConfigurationManager.GetSection("dbTestMonkey/" + ConfigurationSectionName);

            SqlDatabaseConfiguration databaseConfiguration = config.Databases[databaseName];

            string dacpacPath = databaseConfiguration.DacPacFilePath;

            _logAction("Loading Dacpac into memory");
            Stopwatch totalTimer       = Stopwatch.StartNew();
            Stopwatch loadPackageTimer = Stopwatch.StartNew();

            _logAction("current directory:" + Environment.CurrentDirectory);
            _logAction("dacpacPath:" + dacpacPath);

            using (DacPackage dacPackage = DacPackage.Load(dacpacPath, DacSchemaModelStorageType.Memory, FileAccess.Read))
            {
                databaseName = databaseName ?? dacPackage.Name;

                loadPackageTimer.Stop();
                _logAction("Package loaded, initialising DacServices");

                using (IDbConnection connection = _connectionFactory())
                {
                    try
                    {
                        connection.ChangeDatabase(databaseName);
                    }
                    catch
                    {
                        _logAction(
                            "Could not change connection to database " +
                            databaseName +
                            " before pre-deployment script. Database may not yet exist.");
                    }

                    // Execute the DAC pre-deployment script.
                    if (dacPackage.PreDeploymentScript != null)
                    {
                        using (IDbCommand command = connection.CreateCommand())
                        {
                            command.CommandText = new StreamReader(dacPackage.PreDeploymentScript).ReadToEnd();
                            command.CommandText = command.CommandText.Replace("\nGO", "");
                            command.ExecuteNonQuery();
                        }
                    }

                    _logAction("Deploying dacpac");
                    Stopwatch dacpacDeployTimer = Stopwatch.StartNew();

                    DacDeployOptions options = new DacDeployOptions()
                    {
                        CreateNewDatabase = true
                    };

                    SqlCmdVariablesConfigurationCollection sqlCommandVariables = databaseConfiguration.SqlCommandVariables;
                    foreach (SqlCmdVariableConfiguration sqlCmd in sqlCommandVariables)
                    {
                        options.SqlCommandVariableValues.Add(sqlCmd.Name, sqlCmd.Value);
                        _logAction($"Added SQL command variable {sqlCmd.Name} to DacDeployOptions");
                    }

                    Stopwatch   dacpacServiceTimer = Stopwatch.StartNew();
                    DacServices dacServices        = new DacServices(connection.ConnectionString);
                    dacpacServiceTimer.Stop();

                    _logAction("DacServices initialisation took " + dacpacServiceTimer.ElapsedMilliseconds + " ms");

                    dacServices.Message         += dacServices_Message;
                    dacServices.ProgressChanged += dacServices_ProgressChanged;

                    dacServices.Deploy(dacPackage, databaseName, upgradeExisting: true, options: options);

                    dacpacDeployTimer.Stop();

                    _logAction(
                        "Deploying dacpac took " +
                        dacpacDeployTimer.ElapsedMilliseconds +
                        " ms");

                    // If the user has opted to only run the post-deployment script after the DACPAC
                    // deployment and not per-test, it needs to run once.
                    if (!config.Databases[databaseName].ExecutePostDeploymentScriptPerTest)
                    {
                        ExecutePostDeploymentScript(databaseName, dacPackage);
                    }
                }
            }

            totalTimer.Stop();
            _logAction("Total dacpac time was " + totalTimer.ElapsedMilliseconds + " ms");
        }
示例#3
0
 public static DacPackage GetPackage(string dacPath)
 {
     return(DacPackage.Load(dacPath, DacSchemaModelStorageType.File, System.IO.FileAccess.Read));
 }
示例#4
0
 public DacPackageImpl(string dacpacPath)
 {
     _dacpac = DacPackage.Load(dacpacPath);
 }
示例#5
0
        public override void Execute()
        {
            DacPackage dacpac = DacPackage.Load(this.Parameters.PackageFilePath);

            this.DacServices.Deploy(dacpac, this.Parameters.DatabaseName, this.Parameters.UpgradeExisting, null, this.CancellationToken);
        }
示例#6
0
        public void Deploy(string dbname, string dacpacpath, DacDeployOptions options)
        {
            var dp = DacPackage.Load(dacpacpath);

            ds.Deploy(dp, dbname, true, options);
        }
示例#7
0
 public void loadDacPac(string path)
 {
     this.DacPackage = DacPackage.Load(path);
 }