示例#1
0
        private void HandleDeploymentHistory(string schemaName, string contextKey)
        {
            var factory = DbProviderFactories.GetFactory(m_ConnectionInfoBuilder.ProviderName);

            using (var connection = factory.CreateConnection())
            {
                connection.ConnectionString = m_ConnectionInfoBuilder.BuildConnectionString(
                    m_Config.Database,
                    m_Config.AuthMode,
                    m_Config.SqlLogin,
                    m_Config.SqlPassword);

                connection.Open();

                Log.Information(
                    "Creating {contextKey} deployment history in {schemaName} schema " +
                    "on {endPointServer}\\{endpointDatabase} using {targetAssemblyPath}.",
                    contextKey,
                    schemaName,
                    m_Config.Database.ServerName,
                    m_Config.Database.DatabaseName,
                    m_Config.TargetAssemblyPath);

                DeploymentHistory.Create(
                    contextKey,
                    GetVersion().ToString(),
                    m_Config.TargetAssemblyPath,
                    connection,
                    schemaName);

                connection.Close();
            }
        }
示例#2
0
        private void SetupDeploymentHistory(string schemaName)
        {
            Log.Information(
                "Adding Deployment History table for schema {schemaName} on {endPointServer}\\{endpointDatabase} if it does not exist",
                schemaName,
                m_Config.Database.ServerName,
                m_Config.Database.DatabaseName);

            var factory = DbProviderFactories.GetFactory(m_ConnectionInfoBuilder.ProviderName);

            using (var connection = factory.CreateConnection())
            {
                connection.ConnectionString = m_ConnectionInfoBuilder.BuildConnectionString(
                    m_Config.Database,
                    m_Config.AuthMode,
                    m_Config.SqlLogin,
                    m_Config.SqlPassword);

                connection.Open();
                DeploymentHistory.Setup(connection, schemaName);
                connection.Close();
            }
        }
示例#3
0
        private Assembly LazyLoadDeployedAssembly()
        {
            var isOverrideDeploymentHistory = !string.IsNullOrEmpty(m_Config.DeployedAssemblyOverridePath);

            if (isOverrideDeploymentHistory)
            {
                Log.Information(
                    "Override deployed assembly path {overridePath} specified.  Deployment History will not be used!",
                    m_Config.DeployedAssemblyOverridePath);
                return(m_AssemblyLoader.Load(MigrationsSource.Deployed, m_Config.DeployedAssemblyOverridePath));
            }

            if (m_Config.Mode == DeploymentMode.InitializeOnly || m_Config.Mode == DeploymentMode.SeedOnly)
            {
                return(null);
            }

            string deploymentHistoryAssemblyPath = null;
            var    targetContextKeySchema        = GetContextKeySchema(TargetAssembly, m_Config.MigrationConfig.Type);

            if (targetContextKeySchema == null)
            {
                Log.Warning(
                    "Failed to determine context key and schema name for config type {configType} in target assembly {assemblyPath}.  " +
                    "The cause is most likely an attempt to migrate downward to a version in which {configType} does not exist.  " +
                    "A deployed assembly override must be specified in these cases.  Downward migrations will either not occur or will fail.",
                    m_Config.MigrationConfig.Type,
                    TargetAssembly.CodeBase);
                return(null);
            }

            if (!GetIsTargetDatabaseExists())
            {
                Log.Debug(
                    "Database {endpointDatabase} does not exist on {endPointServer}.  Deployment History will not be used.",
                    m_Config.Database.DatabaseName,
                    m_Config.Database.ServerName);
                return(null);
            }

            var factory = DbProviderFactories.GetFactory(m_ConnectionInfoBuilder.ProviderName);

            using (var connection = factory.CreateConnection())
            {
                connection.ConnectionString = m_ConnectionInfoBuilder.BuildConnectionString(
                    m_Config.Database,
                    m_Config.AuthMode,
                    m_Config.SqlLogin,
                    m_Config.SqlPassword);

                connection.Open();

                Log.Debug(
                    "Extracting current deployment history assemblies " +
                    "for {contextKey} in {schemaName} schema on {endPointServer}\\{endpointDatabase} to {extractPath}.",
                    targetContextKeySchema.ContextKey,
                    targetContextKeySchema.SchemaName,
                    m_Config.Database.ServerName,
                    m_Config.Database.DatabaseName,
                    m_Config.DeploymentHistoryExtractPath);

                deploymentHistoryAssemblyPath = DeploymentHistory.ExtractCurrent(
                    targetContextKeySchema.ContextKey,
                    connection,
                    targetContextKeySchema.SchemaName,
                    m_Config.DeploymentHistoryExtractPath);
                connection.Close();
            }

            if (string.IsNullOrEmpty(deploymentHistoryAssemblyPath))
            {
                Log.Warning("No {targetSchemaName} Deployment History available for {targetContextKey} on {endPointServer}\\{endpointDatabase}.",
                            targetContextKeySchema.SchemaName,
                            targetContextKeySchema.ContextKey,
                            m_Config.Database.ServerName,
                            m_Config.Database.DatabaseName);
                return(null);
            }

            return(m_AssemblyLoader.Load(MigrationsSource.Deployed, deploymentHistoryAssemblyPath));
        }