public void Run(InstallSettings settings)
{
//STEPS TO COPY DATABASE TO AZURE
//1. Verify that target is a blank database
//2. Execute only tables schemas with no defaults, relations, etc
//3. Copy data with BCP one table at a time
//4. Run full installer on the target database
//1. Verify that target is a blank database
if (!this.TargetIsBlank(settings))
throw new Exception("The target database must be empty!");
//2. Execute only tables schemas and PK with no defaults, relations, etc
Assembly assem = Assembly.GetExecutingAssembly();
string[] resourceNames = assem.GetManifestResourceNames();
var resourceName = resourceNames.FirstOrDefault(x => x.EndsWith(".Create_Scripts.Generated.CreateSchema.sql"));
if (string.IsNullOrEmpty(resourceName)) throw new Exception("Could not find the 'CreateSchema.sql' resource!");
var scripts = SqlServers.ReadSQLFileSectionsFromResource(resourceName, null);
SqlConnection connection = null;
try
{
connection = new SqlConnection(settings.GetCloudConnectionString());
connection.Open();
////Create version table
//var sb = new StringBuilder();
//sb.AppendLine("if not exists(select * from sysobjects where name = '__nhydrateschema' and xtype = 'U')");
//sb.AppendLine("BEGIN");
//sb.AppendLine("CREATE TABLE [__nhydrateschema] (");
//sb.AppendLine("[dbVersion] [varchar] (50) NOT NULL,");
//sb.AppendLine("[LastUpdate] [datetime] NOT NULL,");
//sb.AppendLine("[ModelKey] [uniqueidentifier] NOT NULL,");
//sb.AppendLine("[History] [text] NOT NULL");
//sb.AppendLine(")");
//sb.AppendLine("--PRIMARY KEY FOR TABLE");
//sb.AppendLine("if not exists(select * from sysobjects where name = '__pk__nhydrateschema' and xtype = 'PK')");
//sb.AppendLine("ALTER TABLE [__nhydrateschema] WITH NOCHECK ADD CONSTRAINT [__pk__nhydrateschema] PRIMARY KEY CLUSTERED ([ModelKey])");
//sb.AppendLine("END");
//var command2 = new SqlCommand(sb.ToString(), connection);
//command2.ExecuteNonQuery();
foreach (string sql in scripts)
{
if (
sql.Contains("--CREATE TABLE") ||
sql.Contains("--CREATE AUDIT TABLE") ||
sql.StartsWith("--APPEND AUDIT") ||
sql.StartsWith("--PRIMARY KEY FOR TABLE"))
{
var command = new SqlCommand(sql, connection);
command.ExecuteNonQuery();
}
}
}
catch (Exception ex)
{
throw;
}
finally
{
if (connection != null)
connection.Close();
}
//3. Copy data with BCP one table at a time
this.CopyData(settings);
//4. Run full installer on the target database
var setup = new InstallSetup()
{
ConnectionString = settings.GetCloudConnectionString(),
InstallStatus = InstallStatusConstants.Upgrade,
};
UpgradeInstaller.UpgradeDatabase(setup);
}