private void GenerateScript(Stream dacpac)
        {
            _log.Info("Building script...");

            _log.Verbose("DacPackage loading...");
            var package = DacPackage.Load(dacpac, DacSchemaModelStorageType.Memory);

            var dacOptions   = GetDacDeployOptions();
            var targetDbName = GetTargetDatabaseName();

            _log.Verbose("Transforming dacpac to create script.");
            var script = DacServices.GenerateCreateScript(package, targetDbName, dacOptions);

            using (var output = GetScriptStreamWriter())
                output.Write(script);
            _log.Success("Schema script created. Total {0:N0}kb.", script.Length / 1024f);

            if (_options.CopyLooseScripts)
            {
                _log.Verbose("Attempting to copy loose files.");

                _log.Info("Loading loose files...");
                var looseFiles = _project.GetLooseFiles().ToList();
                foreach (var file in looseFiles)
                {
                    string src  = file.PhysicalPath;
                    string dest = Path.Combine(_options.Output, file.Path, file.Filename);
                    CopyLooseFile(src, dest);
                }
                _log.Success("{0} loose file(s) copied..", looseFiles.Count);
            }
        }
Exemple #2
0
        public void GenerateCreateScript_ShouldNotModifyDeployOptions()
        {
            // Arrange
            var packageName = "MyPackage";

            var firstReference = new TestModelBuilder()
                                 .AddTable("MyFirstTable", ("Column1", "nvarchar(100)"))
                                 .SaveAsPackage();

            var secondReference = new TestModelBuilder()
                                  .AddTable("MySecondTable", ("Column1", "nvarchar(100)"))
                                  .AddReference(firstReference)
                                  .SaveAsPackage();

            var tempFile       = new FileInfo(Path.GetTempFileName());
            var packageBuilder = new PackageBuilder();

            packageBuilder.UsingVersion(SqlServerVersion.Sql150);
            packageBuilder.SetMetadata(packageName, "1.0.0.0");
            packageBuilder.AddReference(firstReference);
            packageBuilder.AddReference(secondReference);
            packageBuilder.ValidateModel();

            var deployOptions = new DacDeployOptions();

            deployOptions.IncludeCompositeObjects = true;
            deployOptions.CreateNewDatabase       = true;

            var expectedCreateScriptFileName = $"{packageName}_Expected_Create.sql";

            // Act - Generate expected script
            packageBuilder.SaveToDisk(tempFile);
            using var package = DacPackage.Load(tempFile.FullName);
            using var expectedCreateScriptFile = File.Create(Path.Combine(tempFile.DirectoryName, expectedCreateScriptFileName));
            DacServices.GenerateCreateScript(expectedCreateScriptFile, package, packageName, deployOptions);
            expectedCreateScriptFile.Close();

            // Act - Generate script
            packageBuilder.GenerateCreateScript(tempFile, packageName, deployOptions);

            // Assert
            var expectedScriptContent = File.ReadAllText(Path.Combine(tempFile.DirectoryName, expectedCreateScriptFileName));

            expectedScriptContent.ShouldNotBeNullOrEmpty();

            var scriptContent = File.ReadAllText(Path.Combine(tempFile.DirectoryName, $"{packageName}_Create.sql"));

            scriptContent.ShouldNotBeNullOrEmpty();

            expectedScriptContent.ShouldBe(scriptContent);

            // Cleanup
            tempFile.Delete();
        }