Acme.Northwind.Install.AzureCopy.Run C# (CSharp) Метод

Run() публичный Метод

public Run ( InstallSettings settings ) : void
settings InstallSettings
Результат void
		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);

		}